我有一个具有以下值的输入文件:
file1.txt
Name ID Code
ABC 12 322
QWE 97 214
ASD 86 111
FGH 12 322
RTY 86 322
BNM 86 214
POK 12 111
MKI 33 322
我想基于ID
的重复生成多个文件。当上述文件作为输入时,输出将为:
第一个文件
12.txt
ABC 12 322
FGH 12 322
POK 12 111
第二个文件
97.txt
QWE 97 214
第三文件
86.txt
ASD 86 111
RTY 86 322
BNM 86 214
第四文件
33.txt
MKI 33 322
所有具有相同ID的记录将存储在一个中,如果没有重复,则仅存储在另一个文件中。文件名应为ID.txt
。
.txt File
是强制性的输入,在txt文件中,由于每个空格都有一定的值,因此在字符方面是明智的。
谢谢
答案 0 :(得分:0)
您可以使用collections.defaultdict,csv.DictReader和csv.DictWriter来实现。
首先,您必须遍历数据并根据ID
将行添加到相应的行中。我建议使用DictReader
和defaultdict
(使用ID作为键)来简化代码。如果您已将所有行存储到dict
中,则可以将数据写入单独的文件中。
应该执行以下操作:
import csv
from collections import defaultdict
# store all rows as a `list` indexed by the ID
data = defaultdict(list)
with open('file.csv') as fh:
reader = csv.DictReader(fh, delimiter=' ', skipinitialspace=True)
for row in reader:
data[row['id']].append(row)
# Write rows to different files based on the ID
for id_, rows in data.items():
fieldnames = rows[0].keys()
with open(f'{id_}.txt', 'w') as fh:
writer = csv.DicWriter(fh, delimiter=' ', fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)