从File Python中提取/分离具有重复和唯一值的记录

时间:2018-12-02 19:07:33

标签: python-3.x duplicates text-extraction

我有一个具有以下值的输入文件:

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文件中,由于每个空格都有一定的值,因此在字符方面是明智的。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用collections.defaultdictcsv.DictReadercsv.DictWriter来实现。 首先,您必须遍历数据并根据ID将行添加到相应的行中。我建议使用DictReaderdefaultdict(使用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)