2016-10-25 140 views
1

我想用python添加一個新的列標題和值到現有的csv文件。我查過的每一件東西都會將標題追加到最後一列的最後一行。這就是我想要的結果。用Python添加列到現有的CSV文件

Header Header2 Header3 NewHeader Value Value2 Value3 NewValue

什麼目前我得到的是:

Header Header2 Header3 
Value Value2 Value3**NewHeader 
NewValue` 

這是我的代碼:

import csv 
    with open('filename.csv', 'a') as csvfile: 
    fieldnames = ['pageviewid'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'pageviewid': 'Baked'}) 
    writer.writerow({'pageviewid': 'Lovely'}) 
    writer.writerow({'pageviewid': 'Wonderful'}) 
+1

'with'語句縮進後至少沒有一些行嗎? –

+0

要添加列,您必須將所有csv讀取到內存中,在內存中添加列,然後再次保存所有文件。 '''表示'附加',但它只能附加在文件的末尾。 – furas

回答

1

最簡單的方法是將改寫到一個輸出文件

import csv 
reader = csv.reader(open('filename.csv', 'rb')) 
writer = csv.writer(open('output.csv', 'w')) 
headers = reader.next() 
headers.append("Brand New Awesome Header") 
writer.write(headers) 
for row in reader: 
    row.append(new data for my new header) 
    writer.write(row) 
+0

您不需要以二進制模式讀取文本文件。 「rb」模式有其他原因嗎?否則一個很好的答案。 – WombatPM

+0

@Chris Kenyon我假設你的意思是'writer.writerow'而不是'writer.write'。 – oba2311

2

如果使用熊貓是一種選擇:

import pandas as pd 
df = pd.read_csv('filename.csv') 
new_column = pd.DataFrame({'new_header': ['new_value_1', 'new_value_2', 'new_value_3']}) 
df = df.merge(new_column, left_index = True, right_index = True) 
df.to_csv('filename.csv') 
+0

使用此方法,我的數據左側會添加一個新列。代碼的其餘部分工作,你知道我可以擺脫這一列嗎?它從0開始到我的列表的末尾,所以它可能枚舉列表的索引。 – duldi