为 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'])
我正在尝试将 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'])