首页 > 解决方案 > 从文件 Python 中提取/分离具有重复值和唯一值的记录

问题描述

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

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 文件中存在字符,因为每个空格都有一些值。

谢谢

标签: python-3.xduplicatestext-extraction

解决方案


您可以通过使用collections.defaultdictcsv.DictReadercsv.DictWriter来实现这一点。首先,您必须遍历数据并根据ID. 我建议使用 aDictReader和 a 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)

推荐阅读