Просто читать из каждого файла, выписывая в выходной файл и добавить в колонке «пропущенного»:
import csv
with open('c.csv', 'wb') as outcsv:
# Python 3: use open('c.csv', 'w', newline='') instead
writer = csv.writer(outcsv)
# copy a.csv across, adding a 3rd column
with open('a.csv', 'rb') as incsv:
# Python 3: use open('a.csv', newline='') instead
reader = csv.reader(incsv)
writer.writerows(row + [0.0] for row in reader)
# copy b.csv across, inserting a 2nd column
with open('b.csv', 'rb') as incsv:
# Python 3: use open('b.csv', newline='') instead
reader = csv.reader(incsv)
writer.writerows(row[:1] + [0.0] + row[1:] for row in reader)
В writer.writerows()
линии делают всю работу; выражение генератора контузируется над строками в каждом reader
, либо добавляя столбец, либо вставляя столбец посередине.
Это работает с любым размером входных CSV, которые у вас есть, так как в памяти хранятся только некоторые буферы чтения и записи. Строки обрабатываются итеративно, без необходимости хранить все входные или выходные файлы в памяти.
Спасибо за это! Все отлично работает с 'a.csv', но не с' b.csv': я получил только первую строку и нули, но не вторую строку ... –
@albus_c: Моя первоначальная версия не использовала нарезку; вы используете мое последнее редактирование? –
Да, я все еще пропускаю одну колонку данных при работе с 'b.csv' –