簡體   English   中英

為 CSV 文件附加標題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM