Извлечение / Разделение записей с дубликатами и уникальными значениями из Файла Python - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть один входной файл со следующими значениями:

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.txt.

.txt File, поскольку ввод является обязательным, а в текстовом файле присутствуют символы, так как для каждого пробела есть значение.

Спасибо

1 Ответ

0 голосов
/ 03 декабря 2018

Этого можно добиться, используя collection.defaultdict , csv.DictReader и csv.DictWriter .Во-первых, вы должны перебрать свои данные и добавить строки в соответствующий набор на основе ID.Я рекомендую использовать DictReader и defaultdict (используйте идентификатор в качестве ключа), чтобы упростить ваш код.Если вы сохранили все свои строки в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...