根据规范将文本文件转换为单独的 CSV 文件

converting a text file into separate CSV files according to its specifications

我有一个文本文件如下。

Wednesday,01,September,2021
Wednesday,01,September,2021,00:15
cod,10,1=0,2=2
cod,18,1=27,2=18,3=20
Wednesday,01,September,2021
Wednesday,01,September,2021,00:30
cod,10,1=5,2=6
cod,18,1=20,2=19,3=15

我想制作单独的CSV文件作为输出,其中行分别是cod10和cod18,列标签是键(cod中1=0,10表示行名是cod10,列名为 1,值为 0)。 第一个 CSV 文件:

id      1   2
cod10   0   2
cod10   5   6

第二个 CSV 文件:

id      1   2   3
cod18   27  18  20
cod18   20  19  15

如有任何想法,我将不胜感激。

您可以打开并阅读文本文件并仅保存以“cod”开头的行。对于这些行,您在“=”上拆分并将结果保存在嵌套字典中:

with open('file.txt') as f:
    lines = f.read().split('\n')
    out = {}
    for line in lines:
        first, id_num, *splits = line.split(',')
        if first == 'cod':
            for s in splits:
                k, v = s.split('=')
                out.setdefault(first + id_num, {}).setdefault(int(k), []).append(v)
        

然后这会生成一个如下所示的字典:

{'cod10': {1: ['0', '5'], 2: ['2', '6']}, 
 'cod18': {1: ['27', '20'], 2: ['18', '19'], 3: ['20', '15']}}

现在,由于您将其标记为 pandas,您可以使用 pandas 为每个 key-value 对 out(上面生成的)创建一个 DataFrame 对象,然后将每个 id 的值保存为 csv,如下所示。这里的主要工作是 explode 列(因为每个单元格都有一个列表):

for k, v in out.items():
    df = pd.DataFrame.from_dict({k:v}, orient='index').rename_axis(index=['id'])
    df = df.explode(df.columns.tolist()).reset_index()
    df.to_csv(f'file_{k}.csv')
    print(df, end='\n\n\n')

输出:

      id  1  2
0  cod10  0  2
1  cod10  5  6


      id   1   2   3
0  cod18  27  18  20
1  cod18  20  19  15