[英]Append a Header for CSV file?
我正在嘗試向我的 CSV 文件添加標題。
我正在從一個 .csv 文件導入數據,該文件有兩列數據,每一列都包含浮點數。 例子:
11 22
33 44
55 66
現在我想為兩列添加一個標題,如:
ColA ColB
11 22
33 44
55 66
我試過這個:
with open('mycsvfile.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(('ColA', 'ColB'))
我使用'a'
來附加數據,但這會在文件的底行而不是第一行中添加值。 有什么辦法可以解決嗎?
一種方法是讀入所有數據,然后用頭覆蓋文件並再次寫出數據。 對於大型 CSV 文件,這可能不切實際:
#!python3
import csv
with open('file.csv',newline='') as f:
r = csv.reader(f)
data = [line for line in r]
with open('file.csv','w',newline='') as f:
w = csv.writer(f)
w.writerow(['ColA','ColB'])
w.writerows(data)
我認為您應該使用 Pandas 來讀取 csv 文件,插入列標題/標簽,並發出新的 csv 文件。 假設您的 csv 文件以逗號分隔。 這樣的事情應該工作:
from pandas import read_csv
df = read_csv('test.csv')
df.columns = ['a', 'b']
df.to_csv('test_2.csv')
我知道這個問題很久以前就被問到了。 但是對於其他遇到這個問題的人來說,這里有一個 Python 的替代方案。
如果您有權訪問 sed(如果您在 Linux 或 Mac 上工作,則可以訪問;您還可以在 Windows 10 上下載 Ubuntu Bash,sed 將隨附),您可以使用以下單行:
sed -i 1i"ColA,ColB" mycsvfile.csv
-i 將確保 sed 將就地編輯,這意味着 sed 將覆蓋帶有頂部標題的文件。 這是有風險的。
如果您想創建一個新文件,請執行以下操作
sed 1i"ColA,ColB" mycsvfile.csv > newcsvfile.csv
在這種情況下,您不需要 CSV 模塊。 您需要fileinput
模塊,因為它允許就地編輯:
import fileinput
for line in fileinput.input(files=['mycsvfile.csv'], inplace=True):
if fileinput.isfirstline():
print 'ColA,ColB'
print line,
在上面的代碼中,由於inplace=True
參數, print
語句將打印到文件中。
對於 CSV 文件的第一行被標題替換的問題,我們需要添加一個選項。
import pandas as pd
df = pd.read_csv('file.csv', **header=None**)
df.to_csv('file.csv', header = ['col1', 'col2'])
您可以將代碼中的 reader.fieldnames 設置為列表,就像您的情況一樣
with open('mycsvfile.csv', 'a') as fd:
reader = csv.DictReader(fd)
reader.fieldnames = ["ColA" , "ColB"]
for row in fd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.