为 CSV 文件附加 Header?

Append a Header for CSV file?

我正在尝试将 header 添加到我的 CSV 文件中。

我正在从一个 .csv 文件导入数据,该文件有两列数据,每列都包含浮点数。示例:

  11   22
  33   44
  55   66

现在我想为两列添加一个 header,例如:

 ColA  ColB
  11    22
  33    44
  55    66

我试过这个:

with open('mycsvfile.csv', 'a') as f:
    writer = csv.writer(f)
    writer.writerow(('ColA', 'ColB'))

我使用 'a' 来附加数据,但这会在文件的底行而不是第一行中添加值。有什么办法可以解决吗?

我认为您应该使用 pandas 读取 csv 文件,插入列 headers/labels,然后发出新的 csv 文件。假设您的 csv 文件是逗号分隔的。这样的事情应该有效:

   from pandas import read_csv

   df = read_csv('test.csv')
   df.columns = ['a', 'b']
   df.to_csv('test_2.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 文件可能不切实际:

#!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)

您可以在代码中将 reader.fieldnames 设置为列表 就像你的情况

 with open('mycsvfile.csv', 'a') as fd:
        reader = csv.DictReader(fd)
        reader.fieldnames = ["ColA" , "ColB"]
        for row in fd

我知道很久以前就有人问过这个问题。但是对于其他遇到这个问题的人来说,这里有一个 Python.

的替代方法

如果您可以访问 sed(如果您正在 Linux 或 Mac 上工作,您可以访问;您还可以在 [=23= 上下载 Ubuntu Bash ] 10 并且 sed 会附带),你可以使用这个 one-liner:

sed -i 1i"ColA,ColB" mycsvfile.csv

-i 将确保 sed 将编辑 in-place,这意味着 sed 将覆盖顶部带有 header 的文件。这是有风险的。

如果您想创建一个新文件,请执行此操作

sed 1i"ColA,ColB" mycsvfile.csv > newcsvfile.csv

对于 CSV 文件的第一行被 header 替换的问题,我们需要添加一个选项。

import pandas as pd  
df = pd.read_csv('file.csv', **header=None**)  
df.to_csv('file.csv', header = ['col1', 'col2'])