根据规范将文本文件转换为单独的 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
我有一个文本文件如下。
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