为CSV文件附加标题?

时间:2015-01-27 02:40:58

标签: python csv

我正在尝试为我的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'来附加数据,但这会在文件的底行而不是第一行中添加值。有什么办法可以解决吗?

6 个答案:

答案 0 :(得分:18)

一种方法是读取所有数据,然后用标题覆盖文件并再次写出数据。对于大型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)

答案 1 :(得分:7)

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

   from pandas import read_csv

   df = read_csv('test.csv')
   df.columns = ['a', 'b']
   df.to_csv('test_2.csv')

答案 2 :(得分:2)

我知道这个问题已经问了很久了。但是对于其他在这个问题上绊脚石的人,这里是Python的替代品。

如果您有权使用sed(如果您使用的是Linux或Mac,则可以执行此操作;您也可以在Windows 10上下载Ubuntu Bash,并且sed随附了sed),则可以使用以下代码:

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

-i将确保sed进行就地编辑,这意味着sed将覆盖文件头位于顶部的文件。这是有风险的。

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

在这种情况下,您不需要CSV模块。您需要fileinput模块,因为它允许就地编辑:

import fileinput

for line in fileinput.input(files=['mycsvfile.csv'], inplace=True):
    if fileinput.isfirstline():
        print 'ColA,ColB'
    print line,

在上面的代码中,由于print参数,inplace=True语句将打印到文件中。

答案 5 :(得分:-1)

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

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