2015-09-06 4 views
1

У меня есть куча списков, которые я Zipped:Добавление заголовков в файл CSV

zipped = zip(list1, list2, list3) 

У меня есть файл в формате CSV (который уже имеет заголовки), который выглядит примерно так:

Col_1 Col_2 Col_3 
data  data  data 

Теперь я хочу добавить свои списки заархивированные в колонке уже существующий файл, так что это выглядит так (с именами списка, как заголовки):

Col_1 Col_2 Col_3 list1 list2 list3 
data  data  data  data  data  data 

У меня этот код сейчас:

with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile: 
    reader = csv.reader(infile) 
    writer = csv.writer(outfile) 
    writer.writerow(["list1", "list2", "list3"]) 
    for i, row in enumerate(reader): 
     row.extend(zipped[i]) 
     writer.writerow(row) 

Но, к сожалению, это перезаписывает существующие имена столбцов.

+1

Пожалуйста, отредактируйте ваш вопрос и разместите точный результат, который вы получаете. – MattDMo

+0

вы можете использовать DictWriter с помощью метода '' writeheader() '] (https://docs.python.org/2/library/csv.html#csv.DictWriter.writeheader). –

ответ

2

Вы должны сохранить существующий заголовок, который является первой строкой из вашего объекта читателя:

with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile: 
    reader = csv.reader(infile) 
    header = next(reader) # get header 
    writer = csv.writer(outfile) 
    # create list with old header and new 
    writer.writerow(header+["list1", "list2", "list3"]) 

Вы также можете использовать itertools.izip застегнуть списки призывающих следующим в цикл, чтобы получить каждый подэлемент:

from itertools import izip 
zipped = izip(list1, list2, list3) 
with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile: 
    reader = csv.reader(infile) 
    headers = next(reader) 
    writer = csv.writer(outfile) 
    writer.writerow(headers+["list1", "list2", "list3"]) 
    for row in reader: 
     row.extend(next(zipped)) 
     writer.writerow(row) 

Ваш собственный код на самом деле не будет перезаписывать заголовок, он добавит ваш новый заголовок, а затем исходный заголовок заархивирован первым подэлементом из вашего zip-списка сразу после.

+1

@ пользователь3100115, приветствия. –

Смежные вопросы