Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否为CSV文件附加标题?_Python_Csv - Fatal编程技术网

Python 是否为CSV文件附加标题?

Python 是否为CSV文件附加标题?,python,csv,Python,Csv,我正在尝试向CSV文件添加标题 我从一个.csv文件导入数据,该文件有两列数据,每列都包含浮点数。例如: 11 22 33 44 55 66 现在我想为这两列添加一个标题,如: 可乐可乐 11 22 33 44 55 66 我试过这个: with open('mycsvfile.csv', 'a') as f: writer = csv.writer(f) writer.writerow(('ColA', 'ColB')) 我使用'a'来追加数据,

我正在尝试向CSV文件添加标题

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

11 22
33   44
55   66
现在我想为这两列添加一个标题,如:

可乐可乐 11 22 33 44 55 66 我试过这个:

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

我使用
'a'
来追加数据,但这会将值添加到文件的底部行,而不是第一行。有什么方法可以修复它吗?

我认为您应该使用pandas读取csv文件,插入列标题/标签,并发出新的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上工作,您可以访问;您也可以在Windows 10上下载Ubuntu Bash,sed将随附),您可以使用以下一行代码:

sed -i 1i"ColA,ColB" mycsvfile.csv
i将确保sed将在位编辑,这意味着sed将用顶部的标题覆盖文件。这是有风险的

如果要创建新文件,请执行以下操作

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

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

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

你需要展示一个完整的例子来演示这个问题。可能重复:我已经看到了这个问题,但我认为这与.csv文件透视图不同。没有办法只写文件的开头。解决方法是写出整个文件,在开始时使用新信息,您可以手动编辑该文件吗?使用文本编辑器或将标题写入另一个文件,不要使用python,只需使用
cat
将两者连接起来即可。你有成千上万的CSV文件需要附加标题吗?非常感谢。我在找这样的东西。很好的一个@MishalAhmed!谢谢你的评论。执行此操作时,我的第一行将替换为标题。如何在保留所有行的同时追加标题?非常感谢。