如何在不使用 numpy 的情况下将数据提取到二维数组中

How To Extract data into a two dimensional array without using numpy

我正在尝试从 markdown 文件在 python 中创建一个二维数组。 我目前有杂乱无章的数据,我已经小心地删除了不需要的字段。 我目前遇到的问题是,如何遍历我的数据并将其添加到数组中。

当前数据未组织(melbourne.md):

| --- |
| Melbourne |
| --- |
|  2021 |
| --- |
| Rnd | T | Opponent | Scoring | F | Scoring | A | R | M | W-D-L | Venue | Crowd | Date |
| R1 | H | Fremantle | 4.4 7.6 9.8 11.14  | 80 | 0.4 3.8 6.9 8.10  | 58 | W | 22 | 1-0-0 | M.C.G. |  21365 | Sat 20-Mar-2021 1:45 PM |
| R2 | A | St Kilda | 3.4 6.7 9.13 12.19  | 91 | 3.2 6.3 8.4 11.7  | 73 | W | 18 | 2-0-0 | Docklands |  25903 | Sat 27-Mar-2021 7:25 PM |
| R3 | A | Greater Western Sydney | 2.3 6.5 10.7 15.12  | 102 | 5.1 7.1 8.1 11.2  | 68 | W | 34 | 3-0-0 | Manuka Oval |  9563 | Sun 04-Apr-2021 6:10 PM |
| R4 | H | Geelong | 2.4 6.8 9.9 12.13  | 85 | 1.1 3.3 8.3 9.6  | 60 | W | 25 | 4-0-0 | M.C.G. |  33728 | Sun 11-Apr-2021 3:20 PM |
| R5 | A | Hawthorn | 2.5 4.7 7.10 15.14  | 104 | 4.3 5.3 6.6 8.6  | 54 | W | 50 | 5-0-0 | M.C.G. |  36337 | Sun 18-Apr-2021 3:20 PM |
| R6 | H | Richmond | 2.2 6.6 10.8 12.10  | 82 | 3.3 3.7 5.8 6.12  | 48 | W | 34 | 6-0-0 | M.C.G. |  56418 | Sat 24-Apr-2021 7:25 PM |
| R7 | A | North Melbourne | 3.2 6.4 12.7 16.7  | 103 | 4.1 9.5 10.6 11.7  | 73 | W | 30 | 7-0-0 | Bellerive Oval |  6009 | Sun 02-May-2021 1:10 PM |
| R8 | H | Sydney | 3.1 5.6 8.6 10.7  | 67 | 3.3 3.7 6.8 8.10  | 58 | W | 9 | 8-0-0 | M.C.G. |  35567 | Sat 08-May-2021 7:25 PM |
| R9 | H | Carlton | 4.3 8.6 12.9 13.16  | 94 | 3.2 6.5 8.7 10.8  | 68 | W | 26 | 9-0-0 | M.C.G. |  38581 | Sun 16-May-2021 3:20 PM |
| R10 | A | Adelaide | 5.1 8.4 11.8 14.11  | 95 | 4.2 8.4 11.5 15.6  | 96 | L | -1 | 9-0-1 | Adelaide Oval |  31373 | Sat 22-May-2021 4:05 PM |
| R11 | A | Western Bulldogs | 6.5 9.6 12.8 13.9  | 87 | 2.2 6.5 6.8 8.11  | 59 | W | 28 | 10-0-1 | Docklands |  | Fri 28-May-2021 7:50 PM |
| R12 | H | Brisbane Lions | 2.3 5.4 10.9 14.13  | 97 | 4.4 8.6 10.8 11.9  | 75 | W | 22 | 11-0-1 | Showground |  3772 | Fri 04-Jun-2021 7:50 PM |
| R13 | H | Collingwood | 2.2 4.4 8.6 9.9  | 63 | 1.4 6.8 8.11 11.14  | 80 | L | -17 | 11-0-2 | S.C.G. |  16453 | Mon 14-Jun-2021 3:20 PM |
| R15 | A | Essendon | 1.5 4.8 8.12 9.14  | 68 | 2.3 4.5 6.7 8.9  | 57 | W | 11 | 12-0-2 | M.C.G. |  19414 | Sat 26-Jun-2021 7:25 PM |
| R16 | H | Greater Western Sydney | 1.3 3.6 5.9 7.13  | 55 | 2.2 6.6 8.8 9.10  | 64 | L | -9 | 12-0-3 | M.C.G. |  16963 | Sat 03-Jul-2021 1:45 PM |
| R17 | A | Port Adelaide | 3.2 8.4 10.9 12.14  | 86 | 2.2 5.3 7.5 8.7  | 55 | W | 31 | 13-0-3 | Adelaide Oval |  30908 | Thu 08-Jul-2021 7:10 PM |
| Totals | 194.195 |  1359 | 152.134 |  1046 | P:16 W:13 D:0 L:3 |  | 382354 |  |
| Averages |  12.12 |  85 |  10.8 |  65 |  |  |  25490 |  |
| --- |
|  2020 |
| --- |
| Rnd | T | Opponent | Scoring | F | Scoring | A | R | M | W-D-L | Venue | Crowd | Date |
| R1 | A | West Coast | 0.4 3.6 5.9 7.9  | 51 | 5.1 7.3 11.6 12.6  | 78 | L | -27 | 0-0-1 | Perth Stadium |  | Sun 22-Mar-2020 3:40 PM |
| R2 | A | Carlton | 5.2 7.4 8.5 8.6  | 54 | 0.0 2.5 4.6 7.11  | 53 | W | 1 | 1-0-1 | Docklands |  | Sat 13-Jun-2020 4:35 PM |
| R4 | H | Geelong | 0.1 2.3 3.5 6.8  | 44 | 2.1 2.2 6.4 7.5  | 47 | L | -3 | 1-0-2 | M.C.G. |  | Sun 28-Jun-2020 3:35 PM |
| R5 | H | Richmond | 3.1 3.2 5.2 8.4  | 52 | 3.2 7.3 9.7 12.7  | 79 | L | -27 | 1-0-3 | M.C.G. |  | Sun 05-Jul-2020 3:35 PM |
| R6 | H | Gold Coast | 2.1 6.5 8.8 12.8  | 80 | 3.2 5.4 8.5 9.9  | 63 | W | 17 | 2-0-3 | Showground |  250 | Sat 11-Jul-2020 6:05 PM |
| R7 | A | Hawthorn | 3.2 7.3 11.6 14.7  | 91 | 1.2 2.3 4.6 7.6  | 48 | W | 43 | 3-0-3 | Showground |  750 | Sun 19-Jul-2020 3:35 PM |
| R8 | H | Brisbane Lions | 2.2 3.3 4.6 7.7  | 49 | 2.2 5.5 7.6 7.11  | 53 | L | -4 | 3-0-4 | Carrara |  3011 | Sun 26-Jul-2020 6:10 PM |
| R9 | H | Port Adelaide | 0.2 1.3 3.5 4.8  | 32 | 3.2 6.6 10.9 12.11  | 83 | L | -51 | 3-0-5 | Gabba |  323 | Thu 30-Jul-2020 7:50 PM |
| R10 | A | Adelaide | 3.2 5.4 6.7 13.10  | 88 | 2.4 4.5 4.7 5.7  | 37 | W | 51 | 4-0-5 | Adelaide Oval |  12022 | Wed 05-Aug-2020 7:40 PM |
| R11 | H | North Melbourne | 1.4 4.7 7.8 13.14  | 92 | 3.2 4.2 5.4 5.5  | 35 | W | 57 | 5-0-5 | Adelaide Oval |  2172 | Sun 09-Aug-2020 5:40 PM |
| R12 | H | Collingwood | 3.3 10.4 12.4 16.4  | 100 | 1.1 5.2 6.6 6.8  | 44 | W | 56 | 6-0-5 | Gabba |  5338 | Sat 15-Aug-2020 5:10 PM |
| R13 | A | Western Bulldogs | 1.3 5.5 5.8 7.10  | 52 | 2.4 4.4 10.5 12.8  | 80 | L | -28 | 6-0-6 | Carrara |  1765 | Sat 22-Aug-2020 1:45 PM |
| R14 | H | St Kilda | 4.0 5.1 7.3 8.4  | 52 | 1.3 4.5 6.6 7.7  | 49 | W | 3 | 7-0-6 | Traeger Park |  1917 | Sat 29-Aug-2020 7:10 PM |
| R15 | A | Sydney | 2.3 2.4 3.7 6.10  | 46 | 2.0 7.2 7.4 10.7  | 67 | L | -21 | 7-0-7 | Cazaly's Stadium |  3199 | Thu 03-Sep-2020 4:40 PM |
| R16 | H | Fremantle | 0.1 1.3 2.4 4.9  | 33 | 1.6 1.9 4.9 6.11  | 47 | L | -14 | 7-0-8 | Cazaly's Stadium |  3279 | Mon 07-Sep-2020 7:10 PM |
| R17 | A | Greater Western Sydney | 5.2 7.5 9.6 12.7  | 79 | 2.3 7.5 10.7 11.8  | 74 | W | 5 | 8-0-8 | Gabba |  1204 | Sat 12-Sep-2020 7:40 PM |
| R18 | A | Essendon | 1.4 6.6 7.7 10.8  | 68 | 2.0 2.2 3.3 7.7  | 49 | W | 19 | 9-0-8 | Carrara |  2175 | Sat 19-Sep-2020 2:10 PM |
| Totals | 155.133 |  1063 | 142.134 |  986 | P:17 W:9 D:0 L:8 |  | 37405 |  |
| Averages |  9.8 |  63 |  8.8 |  58 |  |  |  2877 |  |

我在运行我的函数后组织的数据:

| Melbourne |
|  2021 |
| R1 | H | Fremantle | 4.4 7.6 9.8 11.14  | 80 | 0.4 3.8 6.9 8.10  | 58 | W | 22 | 1-0-0 | M.C.G. |  21365 | Sat 20-Mar-2021 1:45 PM |
| R2 | A | St Kilda | 3.4 6.7 9.13 12.19  | 91 | 3.2 6.3 8.4 11.7  | 73 | W | 18 | 2-0-0 | Docklands |  25903 | Sat 27-Mar-2021 7:25 PM |
| R3 | A | Greater Western Sydney | 2.3 6.5 10.7 15.12  | 102 | 5.1 7.1 8.1 11.2  | 68 | W | 34 | 3-0-0 | Manuka Oval |  9563 | Sun 04-Apr-2021 6:10 PM |
| R4 | H | Geelong | 2.4 6.8 9.9 12.13  | 85 | 1.1 3.3 8.3 9.6  | 60 | W | 25 | 4-0-0 | M.C.G. |  33728 | Sun 11-Apr-2021 3:20 PM |
| R5 | A | Hawthorn | 2.5 4.7 7.10 15.14  | 104 | 4.3 5.3 6.6 8.6  | 54 | W | 50 | 5-0-0 | M.C.G. |  36337 | Sun 18-Apr-2021 3:20 PM |
| R6 | H | Richmond | 2.2 6.6 10.8 12.10  | 82 | 3.3 3.7 5.8 6.12  | 48 | W | 34 | 6-0-0 | M.C.G. |  56418 | Sat 24-Apr-2021 7:25 PM |
| R7 | A | North Melbourne | 3.2 6.4 12.7 16.7  | 103 | 4.1 9.5 10.6 11.7  | 73 | W | 30 | 7-0-0 | Bellerive Oval |  6009 | Sun 02-May-2021 1:10 PM |
| R8 | H | Sydney | 3.1 5.6 8.6 10.7  | 67 | 3.3 3.7 6.8 8.10  | 58 | W | 9 | 8-0-0 | M.C.G. |  35567 | Sat 08-May-2021 7:25 PM |
| R9 | H | Carlton | 4.3 8.6 12.9 13.16  | 94 | 3.2 6.5 8.7 10.8  | 68 | W | 26 | 9-0-0 | M.C.G. |  38581 | Sun 16-May-2021 3:20 PM |
| R10 | A | Adelaide | 5.1 8.4 11.8 14.11  | 95 | 4.2 8.4 11.5 15.6  | 96 | L | -1 | 9-0-1 | Adelaide Oval |  31373 | Sat 22-May-2021 4:05 PM |
| R11 | A | Western Bulldogs | 6.5 9.6 12.8 13.9  | 87 | 2.2 6.5 6.8 8.11  | 59 | W | 28 | 10-0-1 | Docklands |  | Fri 28-May-2021 7:50 PM |
| R12 | H | Brisbane Lions | 2.3 5.4 10.9 14.13  | 97 | 4.4 8.6 10.8 11.9  | 75 | W | 22 | 11-0-1 | Showground |  3772 | Fri 04-Jun-2021 7:50 PM |
| R13 | H | Collingwood | 2.2 4.4 8.6 9.9  | 63 | 1.4 6.8 8.11 11.14  | 80 | L | -17 | 11-0-2 | S.C.G. |  16453 | Mon 14-Jun-2021 3:20 PM |
| R15 | A | Essendon | 1.5 4.8 8.12 9.14  | 68 | 2.3 4.5 6.7 8.9  | 57 | W | 11 | 12-0-2 | M.C.G. |  19414 | Sat 26-Jun-2021 7:25 PM |
| R16 | H | Greater Western Sydney | 1.3 3.6 5.9 7.13  | 55 | 2.2 6.6 8.8 9.10  | 64 | L | -9 | 12-0-3 | M.C.G. |  16963 | Sat 03-Jul-2021 1:45 PM |
| R17 | A | Port Adelaide | 3.2 8.4 10.9 12.14  | 86 | 2.2 5.3 7.5 8.7  | 55 | W | 31 | 13-0-3 | Adelaide Oval |  30908 | Thu 08-Jul-2021 7:10 PM |
|  2020 |
| R1 | A | West Coast | 0.4 3.6 5.9 7.9  | 51 | 5.1 7.3 11.6 12.6  | 78 | L | -27 | 0-0-1 | Perth Stadium |  | Sun 22-Mar-2020 3:40 PM |
| R2 | A | Carlton | 5.2 7.4 8.5 8.6  | 54 | 0.0 2.5 4.6 7.11  | 53 | W | 1 | 1-0-1 | Docklands |  | Sat 13-Jun-2020 4:35 PM |
| R4 | H | Geelong | 0.1 2.3 3.5 6.8  | 44 | 2.1 2.2 6.4 7.5  | 47 | L | -3 | 1-0-2 | M.C.G. |  | Sun 28-Jun-2020 3:35 PM |
| R5 | H | Richmond | 3.1 3.2 5.2 8.4  | 52 | 3.2 7.3 9.7 12.7  | 79 | L | -27 | 1-0-3 | M.C.G. |  | Sun 05-Jul-2020 3:35 PM |
| R6 | H | Gold Coast | 2.1 6.5 8.8 12.8  | 80 | 3.2 5.4 8.5 9.9  | 63 | W | 17 | 2-0-3 | Showground |  250 | Sat 11-Jul-2020 6:05 PM |
| R7 | A | Hawthorn | 3.2 7.3 11.6 14.7  | 91 | 1.2 2.3 4.6 7.6  | 48 | W | 43 | 3-0-3 | Showground |  750 | Sun 19-Jul-2020 3:35 PM |
| R8 | H | Brisbane Lions | 2.2 3.3 4.6 7.7  | 49 | 2.2 5.5 7.6 7.11  | 53 | L | -4 | 3-0-4 | Carrara |  3011 | Sun 26-Jul-2020 6:10 PM |
| R9 | H | Port Adelaide | 0.2 1.3 3.5 4.8  | 32 | 3.2 6.6 10.9 12.11  | 83 | L | -51 | 3-0-5 | Gabba |  323 | Thu 30-Jul-2020 7:50 PM |
| R10 | A | Adelaide | 3.2 5.4 6.7 13.10  | 88 | 2.4 4.5 4.7 5.7  | 37 | W | 51 | 4-0-5 | Adelaide Oval |  12022 | Wed 05-Aug-2020 7:40 PM |
| R11 | H | North Melbourne | 1.4 4.7 7.8 13.14  | 92 | 3.2 4.2 5.4 5.5  | 35 | W | 57 | 5-0-5 | Adelaide Oval |  2172 | Sun 09-Aug-2020 5:40 PM |
| R12 | H | Collingwood | 3.3 10.4 12.4 16.4  | 100 | 1.1 5.2 6.6 6.8  | 44 | W | 56 | 6-0-5 | Gabba |  5338 | Sat 15-Aug-2020 5:10 PM |
| R13 | A | Western Bulldogs | 1.3 5.5 5.8 7.10  | 52 | 2.4 4.4 10.5 12.8  | 80 | L | -28 | 6-0-6 | Carrara |  1765 | Sat 22-Aug-2020 1:45 PM |
| R14 | H | St Kilda | 4.0 5.1 7.3 8.4  | 52 | 1.3 4.5 6.6 7.7  | 49 | W | 3 | 7-0-6 | Traeger Park |  1917 | Sat 29-Aug-2020 7:10 PM |
| R15 | A | Sydney | 2.3 2.4 3.7 6.10  | 46 | 2.0 7.2 7.4 10.7  | 67 | L | -21 | 7-0-7 | Cazaly's Stadium |  3199 | Thu 03-Sep-2020 4:40 PM |
| R16 | H | Fremantle | 0.1 1.3 2.4 4.9  | 33 | 1.6 1.9 4.9 6.11  | 47 | L | -14 | 7-0-8 | Cazaly's Stadium |  3279 | Mon 07-Sep-2020 7:10 PM |
| R17 | A | Greater Western Sydney | 5.2 7.5 9.6 12.7  | 79 | 2.3 7.5 10.7 11.8  | 74 | W | 5 | 8-0-8 | Gabba |  1204 | Sat 12-Sep-2020 7:40 PM |
| R18 | A | Essendon | 1.4 6.6 7.7 10.8  | 68 | 2.0 2.2 3.3 7.7  | 49 | W | 19 | 9-0-8 | Carrara |  2175 | Sat 19-Sep-2020 2:10 PM |

数据清理功能:

data_array = []
exclude = ["| Totals |", "| Averages |", "| Rnd |", "| --- |"]
def process_teams(input_files):
    data_array = []
    with open(input_files, 'r') as f:
        for line in f:
            line = line.strip()
            fields = line.split("\t")
            if not any(exclude in line for exclude in exclude):
                data_array.append(fields)
    return data_array
print(process_teams('melbourne.md'))

根据我的理解,我当前的函数生成一个数组:Melbourne2021,然后是 | R1 | H | Fremantle | 4.4 7.6 9.8 11.14 | 80 | 0.4 3.8 6.9 8.10 | 58 | W | 22 | 1-0-0 | M.C.G. | 21365 | Sat 20-Mar-2021 1:45 PM | 的数组...下一个数组不包含 Melbourne, 2021 .

我的函数应该 return 一个二维数组。该数组应如下所示: [[Melbourne, 2021, R1, H, Fremantle, 4.4 7.6 9.8 11.14, 80, 0.4 3.8 6.9 8.10, 58, W , 22, 1-0-0, M.C.G, 21365, Sat 20-Mar-2021 1:45 PM ], [Melbourne, 2021, R2, A ,St Kilda, 3.4 6.7 9.13 12.19, 91 , 3.2 6.3 8.4 11.7 , 73 , W , 18 , 2-0-0 , Docklands , 25903 , Sat 27-Mar-2021 7:25 PM], ...]

感谢您的帮助。

如果你真的不想使用 numpy,你可以像这样修改你的原始函数来一次性完成:

def process_teams(input_files):
    final_array = []
    table_separation = False
    current_city = ""
    current_date = ""
    tmp = []
    exclude = ["| Totals |", "| Averages |", "| Rnd |", "| --- |"]
    with open(input_files, 'r') as f:
        for line in f:
            line = line.strip()
            fields = line.split("\t")
            if "| --- |" in fields:
                table_separation = True
            elif table_separation:
                table_separation = False
                if fields[0].count('|') == 2:
                    tmp.append(fields[0])
                else:
                    if len(tmp) == 1:
                        current_date = tmp[0]
                    elif len(tmp) == 2:
                        current_city = tmp[0]
                        current_date = tmp[1]

                    else:
                        print('Unknown')
                        exit()
                    tmp = []
            else:
                if not any(exclude in line for exclude in exclude):
                    final_array.append([current_city, current_date] + fields)
    return final_array

print(process_teams('melbourne.md'))

这个returns:

[['| Melbourne |', '|  2021 |', '| R1 | H | Fremantle | 4.4 7.6 9.8 11.14  | 80 | 0.4 3.8 6.9 8.10  | 58 | W | 22 | 1-0-0 | M.C.G. |  21365 | Sat 20-Mar-2021 1:45 PM |'], ['| Melbourne |', '|  2021 |', '| R2 | A | St Kilda | 3.4 6.7 9.13 12.19  | 91 | 3.2 6.3 8.4 11.7  | 73 | W | 18 | 2-0-0 | Docklands |  25903 | Sat 27-Mar-2021 7:25 PM |'], ['| Melbourne |', '|  2021 |', '| R3 | A | Greater Western Sydney | 2.3 6.5 10.7 15.12  | 102 | 5.1 7.1 8.1 11.2  | 68 | W | 34 | 3-0-0 | Manuka Oval |  9563 | Sun 04-Apr-2021 6:10 PM |'], ['| Melbourne |', '|  2021 |', '| R4 | H | Geelong | 2.4 6.8 9.9 12.13  | 85 | 1.1 3.3 8.3 9.6  | 60 | W | 25 | 4-0-0 | M.C.G. |  33728 | Sun 11-Apr-2021 3:20 PM |'], ['| Melbourne |', '|  2021 |', '| R5 | A | Hawthorn | 2.5 4.7 7.10 15.14  | 104 | 4.3 5.3 6.6 8.6  | 54 | W | 50 | 5-0-0 | M.C.G. |  36337 | Sun 18-Apr-2021 3:20 PM |'], ['| Melbourne |', '|  2021 |', '| R6 | H | Richmond | 2.2 6.6 10.8 12.10  | 82 | 3.3 3.7 5.8 6.12  | 48 | W | 34 | 6-0-0 | M.C.G. |  56418 | Sat 24-Apr-2021 7:25 PM |'], ['| Melbourne |', '|  2021 |', '| R7 | A | North Melbourne | 3.2 6.4 12.7 16.7  | 103 | 4.1 9.5 10.6 11.7  | 73 | W | 30 | 7-0-0 | Bellerive Oval |  6009 | Sun 02-May-2021 1:10 PM |'], ['| Melbourne |', '|  2021 |', '| R8 | H | Sydney | 3.1 5.6 8.6 10.7  | 67 | 3.3 3.7 6.8 8.10  | 58 | W | 9 | 8-0-0 | M.C.G. |  35567 | Sat 08-May-2021 7:25 PM |'], ['| Melbourne |', '|  2021 |', '| R9 | H | Carlton | 4.3 8.6 12.9 13.16  | 94 | 3.2 6.5 8.7 10.8  | 68 | W | 26 | 9-0-0 | M.C.G. |  38581 | Sun 16-May-2021 3:20 PM |'], ['| Melbourne |', '|  2021 |', '| R10 | A | Adelaide | 5.1 8.4 11.8 14.11  | 95 | 4.2 8.4 11.5 15.6  | 96 | L | -1 | 9-0-1 | Adelaide Oval |  31373 | Sat 22-May-2021 4:05 PM |'], ['| Melbourne |', '|  2021 |', '| R11 | A | Western Bulldogs | 6.5 9.6 12.8 13.9  | 87 | 2.2 6.5 6.8 8.11  | 59 | W | 28 | 10-0-1 | Docklands |  | Fri 28-May-2021 7:50 PM |'], ['| Melbourne |', '|  2021 |', '| R12 | H | Brisbane Lions | 2.3 5.4 10.9 14.13  | 97 | 4.4 8.6 10.8 11.9  | 75 | W | 22 | 11-0-1 | Showground |  3772 | Fri 04-Jun-2021 7:50 PM |'], ['| Melbourne |', '|  2021 |', '| R13 | H | Collingwood | 2.2 4.4 8.6 9.9  | 63 | 1.4 6.8 8.11 11.14  | 80 | L | -17 | 11-0-2 | S.C.G. |  16453 | Mon 14-Jun-2021 3:20 PM |'], ['| Melbourne |', '|  2021 |', '| R15 | A | Essendon | 1.5 4.8 8.12 9.14  | 68 | 2.3 4.5 6.7 8.9  | 57 | W | 11 | 12-0-2 | M.C.G. |  19414 | Sat 26-Jun-2021 7:25 PM |'], ['| Melbourne |', '|  2021 |', '| R16 | H | Greater Western Sydney | 1.3 3.6 5.9 7.13  | 55 | 2.2 6.6 8.8 9.10  | 64 | L | -9 | 12-0-3 | M.C.G. |  16963 | Sat 03-Jul-2021 1:45 PM |'], ['| Melbourne |', '|  2021 |', '| R17 | A | Port Adelaide | 3.2 8.4 10.9 12.14  | 86 | 2.2 5.3 7.5 8.7  | 55 | W | 31 | 13-0-3 | Adelaide Oval |  30908 | Thu 08-Jul-2021 7:10 PM |'], ['| Melbourne |', '|  2020 |', '| R1 | A | West Coast | 0.4 3.6 5.9 7.9  | 51 | 5.1 7.3 11.6 12.6  | 78 | L | -27 | 0-0-1 | Perth Stadium |  | Sun 22-Mar-2020 3:40 PM |'], ['| Melbourne |', '|  2020 |', '| R2 | A | Carlton | 5.2 7.4 8.5 8.6  | 54 | 0.0 2.5 4.6 7.11  | 53 | W | 1 | 1-0-1 | Docklands |  | Sat 13-Jun-2020 4:35 PM |'], ['| Melbourne |', '|  2020 |', '| R4 | H | Geelong | 0.1 2.3 3.5 6.8  | 44 | 2.1 2.2 6.4 7.5  | 47 | L | -3 | 1-0-2 | M.C.G. |  | Sun 28-Jun-2020 3:35 PM |'], ['| Melbourne |', '|  2020 |', '| R5 | H | Richmond | 3.1 3.2 5.2 8.4  | 52 | 3.2 7.3 9.7 12.7  | 79 | L | -27 | 1-0-3 | M.C.G. |  | Sun 05-Jul-2020 3:35 PM |'], ['| Melbourne |', '|  2020 |', '| R6 | H | Gold Coast | 2.1 6.5 8.8 12.8  | 80 | 3.2 5.4 8.5 9.9  | 63 | W | 17 | 2-0-3 | Showground |  250 | Sat 11-Jul-2020 6:05 PM |'], ['| Melbourne |', '|  2020 |', '| R7 | A | Hawthorn | 3.2 7.3 11.6 14.7  | 91 | 1.2 2.3 4.6 7.6  | 48 | W | 43 | 3-0-3 | Showground |  750 | Sun 19-Jul-2020 3:35 PM |'], ['| Melbourne |', '|  2020 |', '| R8 | H | Brisbane Lions | 2.2 3.3 4.6 7.7  | 49 | 2.2 5.5 7.6 7.11  | 53 | L | -4 | 3-0-4 | Carrara |  3011 | Sun 26-Jul-2020 6:10 PM |'], ['| Melbourne |', '|  2020 |', '| R9 | H | Port Adelaide | 0.2 1.3 3.5 4.8  | 32 | 3.2 6.6 10.9 12.11  | 83 | L | -51 | 3-0-5 | Gabba |  323 | Thu 30-Jul-2020 7:50 PM |'], ['| Melbourne |', '|  2020 |', '| R10 | A | Adelaide | 3.2 5.4 6.7 13.10  | 88 | 2.4 4.5 4.7 5.7  | 37 | W | 51 | 4-0-5 | Adelaide Oval |  12022 | Wed 05-Aug-2020 7:40 PM |'], ['| Melbourne |', '|  2020 |', '| R11 | H | North Melbourne | 1.4 4.7 7.8 13.14  | 92 | 3.2 4.2 5.4 5.5  | 35 | W | 57 | 5-0-5 | Adelaide Oval |  2172 | Sun 09-Aug-2020 5:40 PM |'], ['| Melbourne |', '|  2020 |', '| R12 | H | Collingwood | 3.3 10.4 12.4 16.4  | 100 | 1.1 5.2 6.6 6.8  | 44 | W | 56 | 6-0-5 | Gabba |  5338 | Sat 15-Aug-2020 5:10 PM |'], ['| Melbourne |', '|  2020 |', '| R13 | A | Western Bulldogs | 1.3 5.5 5.8 7.10  | 52 | 2.4 4.4 10.5 12.8  | 80 | L | -28 | 6-0-6 | Carrara |  1765 | Sat 22-Aug-2020 1:45 PM |'], ['| Melbourne |', '|  2020 |', '| R14 | H | St Kilda | 4.0 5.1 7.3 8.4  | 52 | 1.3 4.5 6.6 7.7  | 49 | W | 3 | 7-0-6 | Traeger Park |  1917 | Sat 29-Aug-2020 7:10 PM |'], ['| Melbourne |', '|  2020 |', "| R15 | A | Sydney | 2.3 2.4 3.7 6.10  | 46 | 2.0 7.2 7.4 10.7  | 67 | L | -21 | 7-0-7 | Cazaly's Stadium |  3199 | Thu 03-Sep-2020 4:40 PM |"], ['| Melbourne |', '|  2020 |', "| R16 | H | Fremantle | 0.1 1.3 2.4 4.9  | 33 | 1.6 1.9 4.9 6.11  | 47 | L | -14 | 7-0-8 | Cazaly's Stadium |  3279 | Mon 07-Sep-2020 7:10 PM |"], ['| Melbourne |', '|  2020 |', '| R17 | A | Greater Western Sydney | 5.2 7.5 9.6 12.7  | 79 | 2.3 7.5 10.7 11.8  | 74 | W | 5 | 8-0-8 | Gabba |  1204 | Sat 12-Sep-2020 7:40 PM |'], ['| Melbourne |', '|  2020 |', '| R18 | A | Essendon | 1.4 6.6 7.7 10.8  | 68 | 2.0 2.2 3.3 7.7  | 49 | W | 19 | 9-0-8 | Carrara |  2175 | Sat 19-Sep-2020 2:10 PM |']]

但如果我是你,我会使用字典结构来保存数据

def process_teams(input_files):
    data_array = []
    table_separation = False
    current_city = ""
    current_date = ""
    tmp = []
    finale_result = {}
    exclude = ["| Totals |", "| Averages |", "| Rnd |", "| --- |"]
    with open(input_files, 'r') as f:
        for line in f:
            line = line.strip()
            fields = line.split("\t")
            if "| --- |" in fields:
                table_separation = True
            elif table_separation:
                table_separation = False
                if fields[0].count('|') == 2:
                    tmp.append(fields[0])
                else:
                    if len(tmp) == 1:
                        if current_date:
                            finale_result[current_city][current_date] = data_array
                            data_array = []
                        current_date = tmp[0]
                    elif len(tmp) == 2:
                        if current_city:
                            finale_result[current_city][current_date] = data_array
                        current_city = tmp[0]
                        current_date = tmp[1]
                        finale_result[current_city] = {current_date: []}

                    else:
                        print('Unknown')
                        exit()
                    tmp = []
            else:
                if not any(exclude in line for exclude in exclude):
                    data_array.append(fields)
        finale_result[current_city][current_date] = data_array
    return finale_result

print(process_teams('melbourne.md'))

给你这样的东西:

{
  "| Melbourne |": {
    "|  2021 |": [
      [
        "| R1 | H | Fremantle | 4.4 7.6 9.8 11.14  | 80 | 0.4 3.8 6.9 8.10  | 58 | W | 22 | 1-0-0 | M.C.G. |  21365 | Sat 20-Mar-2021 1:45 PM |"
      ],
      [
        "| R2 | A | St Kilda | 3.4 6.7 9.13 12.19  | 91 | 3.2 6.3 8.4 11.7  | 73 | W | 18 | 2-0-0 | Docklands |  25903 | Sat 27-Mar-2021 7:25 PM |"
      ],
      [
        "| R3 | A | Greater Western Sydney | 2.3 6.5 10.7 15.12  | 102 | 5.1 7.1 8.1 11.2  | 68 | W | 34 | 3-0-0 | Manuka Oval |  9563 | Sun 04-Apr-2021 6:10 PM |"
      ],
      [
        "| R4 | H | Geelong | 2.4 6.8 9.9 12.13  | 85 | 1.1 3.3 8.3 9.6  | 60 | W | 25 | 4-0-0 | M.C.G. |  33728 | Sun 11-Apr-2021 3:20 PM |"
      ],
      [
        "| R5 | A | Hawthorn | 2.5 4.7 7.10 15.14  | 104 | 4.3 5.3 6.6 8.6  | 54 | W | 50 | 5-0-0 | M.C.G. |  36337 | Sun 18-Apr-2021 3:20 PM |"
      ],
      [
        "| R6 | H | Richmond | 2.2 6.6 10.8 12.10  | 82 | 3.3 3.7 5.8 6.12  | 48 | W | 34 | 6-0-0 | M.C.G. |  56418 | Sat 24-Apr-2021 7:25 PM |"
      ],
      [
        "| R7 | A | North Melbourne | 3.2 6.4 12.7 16.7  | 103 | 4.1 9.5 10.6 11.7  | 73 | W | 30 | 7-0-0 | Bellerive Oval |  6009 | Sun 02-May-2021 1:10 PM |"
      ],
      [
        "| R8 | H | Sydney | 3.1 5.6 8.6 10.7  | 67 | 3.3 3.7 6.8 8.10  | 58 | W | 9 | 8-0-0 | M.C.G. |  35567 | Sat 08-May-2021 7:25 PM |"
      ],
      [
        "| R9 | H | Carlton | 4.3 8.6 12.9 13.16  | 94 | 3.2 6.5 8.7 10.8  | 68 | W | 26 | 9-0-0 | M.C.G. |  38581 | Sun 16-May-2021 3:20 PM |"
      ],
      [
        "| R10 | A | Adelaide | 5.1 8.4 11.8 14.11  | 95 | 4.2 8.4 11.5 15.6  | 96 | L | -1 | 9-0-1 | Adelaide Oval |  31373 | Sat 22-May-2021 4:05 PM |"
      ],
      [
        "| R11 | A | Western Bulldogs | 6.5 9.6 12.8 13.9  | 87 | 2.2 6.5 6.8 8.11  | 59 | W | 28 | 10-0-1 | Docklands |  | Fri 28-May-2021 7:50 PM |"
      ],
      [
        "| R12 | H | Brisbane Lions | 2.3 5.4 10.9 14.13  | 97 | 4.4 8.6 10.8 11.9  | 75 | W | 22 | 11-0-1 | Showground |  3772 | Fri 04-Jun-2021 7:50 PM |"
      ],
      [
        "| R13 | H | Collingwood | 2.2 4.4 8.6 9.9  | 63 | 1.4 6.8 8.11 11.14  | 80 | L | -17 | 11-0-2 | S.C.G. |  16453 | Mon 14-Jun-2021 3:20 PM |"
      ],
      [
        "| R15 | A | Essendon | 1.5 4.8 8.12 9.14  | 68 | 2.3 4.5 6.7 8.9  | 57 | W | 11 | 12-0-2 | M.C.G. |  19414 | Sat 26-Jun-2021 7:25 PM |"
      ],
      [
        "| R16 | H | Greater Western Sydney | 1.3 3.6 5.9 7.13  | 55 | 2.2 6.6 8.8 9.10  | 64 | L | -9 | 12-0-3 | M.C.G. |  16963 | Sat 03-Jul-2021 1:45 PM |"
      ],
      [
        "| R17 | A | Port Adelaide | 3.2 8.4 10.9 12.14  | 86 | 2.2 5.3 7.5 8.7  | 55 | W | 31 | 13-0-3 | Adelaide Oval |  30908 | Thu 08-Jul-2021 7:10 PM |"
      ]
    ],
    "|  2020 |": [
      [
        "| R1 | A | West Coast | 0.4 3.6 5.9 7.9  | 51 | 5.1 7.3 11.6 12.6  | 78 | L | -27 | 0-0-1 | Perth Stadium |  | Sun 22-Mar-2020 3:40 PM |"
      ],
      [
        "| R2 | A | Carlton | 5.2 7.4 8.5 8.6  | 54 | 0.0 2.5 4.6 7.11  | 53 | W | 1 | 1-0-1 | Docklands |  | Sat 13-Jun-2020 4:35 PM |"
      ],
      [
        "| R4 | H | Geelong | 0.1 2.3 3.5 6.8  | 44 | 2.1 2.2 6.4 7.5  | 47 | L | -3 | 1-0-2 | M.C.G. |  | Sun 28-Jun-2020 3:35 PM |"
      ],
      [
        "| R5 | H | Richmond | 3.1 3.2 5.2 8.4  | 52 | 3.2 7.3 9.7 12.7  | 79 | L | -27 | 1-0-3 | M.C.G. |  | Sun 05-Jul-2020 3:35 PM |"
      ],
      [
        "| R6 | H | Gold Coast | 2.1 6.5 8.8 12.8  | 80 | 3.2 5.4 8.5 9.9  | 63 | W | 17 | 2-0-3 | Showground |  250 | Sat 11-Jul-2020 6:05 PM |"
      ],
      [
        "| R7 | A | Hawthorn | 3.2 7.3 11.6 14.7  | 91 | 1.2 2.3 4.6 7.6  | 48 | W | 43 | 3-0-3 | Showground |  750 | Sun 19-Jul-2020 3:35 PM |"
      ],
      [
        "| R8 | H | Brisbane Lions | 2.2 3.3 4.6 7.7  | 49 | 2.2 5.5 7.6 7.11  | 53 | L | -4 | 3-0-4 | Carrara |  3011 | Sun 26-Jul-2020 6:10 PM |"
      ],
      [
        "| R9 | H | Port Adelaide | 0.2 1.3 3.5 4.8  | 32 | 3.2 6.6 10.9 12.11  | 83 | L | -51 | 3-0-5 | Gabba |  323 | Thu 30-Jul-2020 7:50 PM |"
      ],
      [
        "| R10 | A | Adelaide | 3.2 5.4 6.7 13.10  | 88 | 2.4 4.5 4.7 5.7  | 37 | W | 51 | 4-0-5 | Adelaide Oval |  12022 | Wed 05-Aug-2020 7:40 PM |"
      ],
      [
        "| R11 | H | North Melbourne | 1.4 4.7 7.8 13.14  | 92 | 3.2 4.2 5.4 5.5  | 35 | W | 57 | 5-0-5 | Adelaide Oval |  2172 | Sun 09-Aug-2020 5:40 PM |"
      ],
      [
        "| R12 | H | Collingwood | 3.3 10.4 12.4 16.4  | 100 | 1.1 5.2 6.6 6.8  | 44 | W | 56 | 6-0-5 | Gabba |  5338 | Sat 15-Aug-2020 5:10 PM |"
      ],
      [
        "| R13 | A | Western Bulldogs | 1.3 5.5 5.8 7.10  | 52 | 2.4 4.4 10.5 12.8  | 80 | L | -28 | 6-0-6 | Carrara |  1765 | Sat 22-Aug-2020 1:45 PM |"
      ],
      [
        "| R14 | H | St Kilda | 4.0 5.1 7.3 8.4  | 52 | 1.3 4.5 6.6 7.7  | 49 | W | 3 | 7-0-6 | Traeger Park |  1917 | Sat 29-Aug-2020 7:10 PM |"
      ],
      [
        "| R15 | A | Sydney | 2.3 2.4 3.7 6.10  | 46 | 2.0 7.2 7.4 10.7  | 67 | L | -21 | 7-0-7 | Cazaly's Stadium |  3199 | Thu 03-Sep-2020 4:40 PM |"
      ],
      [
        "| R16 | H | Fremantle | 0.1 1.3 2.4 4.9  | 33 | 1.6 1.9 4.9 6.11  | 47 | L | -14 | 7-0-8 | Cazaly's Stadium |  3279 | Mon 07-Sep-2020 7:10 PM |"
      ],
      [
        "| R17 | A | Greater Western Sydney | 5.2 7.5 9.6 12.7  | 79 | 2.3 7.5 10.7 11.8  | 74 | W | 5 | 8-0-8 | Gabba |  1204 | Sat 12-Sep-2020 7:40 PM |"
      ],
      [
        "| R18 | A | Essendon | 1.4 6.6 7.7 10.8  | 68 | 2.0 2.2 3.3 7.7  | 49 | W | 19 | 9-0-8 | Carrara |  2175 | Sat 19-Sep-2020 2:10 PM |"
      ]
    ]
  }
}

这些解决方案根本没有优化,需要清理字典键中的数据。