Использование Python 2.7 для открытия файла превратит его в словарь с номером 0 как ключ и строку 3 в качестве значений. Затем откройте файл b для соответствующего идентификационного номера в строке 0, чтобы добавить другие столбцы для соответствия. Затем конвертируйте обратно в список и объедините два CSV.CSV-файл с неожиданным двойным пространством Python
В конце добавить заголовки и сохранить как "output.csv."
И пример того, что я ожидал:
Файл: с
1234, 14/12/2,123.4,
5618, 13/1/12,23.4,
9143, 15/2/14,222.4,
Файл б:
1234,abc,cda
9143,nda, bad
5618, ede, fpc
(сон) Выход:
payment date, payment amount, other id, other other id, payment status, payment type
14/12/2,123.4,1234,abc,cda, Received, Recurring
13/1/12,23.4,9143,nda, bad, Received, Recurring
15/2/14,222.4,5618, ede, fpc,Received, Recurring
(фактическая):
ID, payment date, payment amount, other id, other other id, payment status, payment type
1234, 14/12/2,123.4,1234,abc,cda, Received, Recurring
5618, 13/1/12,23.4,9143,nda, bad, Received, Recurring
9143, 15/2/14,222.4,5618, ede, fpc,Received, Recurring
Код:
import csv
#create a dict from first csv, with clearing solution id as key
with open("DDS.csv", "rb") as f:
first = {rows[0]: rows[3:] for rows in list(csv.reader(f))}
# compare second csv, append rank, add received recurring columns
with open("report.csv", "rb") as f:
for row in csv.reader(f):
if row and row[0] in first: # row[0] = clearing solution id
first[row[0]].append(row[1]) # row[1] = rank
first[row[0]].append(row[2])
first[row[0]].append('Received')
first[row[0]].append('Recurring')
# convert dict back to list
merged = [(k,) + tuple(v) for k, v in first.items()]
# write list to output csv
with open('output.csv', "w") as f:
writer = csv.DictWriter(f, fieldnames =['ID', 'Payment Date', 'Payment Amount', 'Other ID','other other ID', 'Payment Status', 'Payment Type'])
writer.writeheader()
csv.writer(f).writerows(merged)
Бонусные баллы: Как удалить первый столбец из выходных данных CSV?
Благодаря
Непосредственная проблема, которую вы видите с лишними пустыми строками, должна быть решена путем добавления аргумента 'lineterminator = '\ n'' к' csv.DictWriter() ', в Windows модуль csv использует определитель' r \ n' по умолчанию, см. похожие вопросы, например [здесь] (http://stackoverflow.com/q/19618856/1222578) – Marius