例如给定mycsv.csv
文件
h1,h2
a,b
c,d
如何用h2
将HTwo
重命名为reader
reader = csv.DictReader(open('mycsv.csv'))
(另外,如何使用更新的标头写回csv文件。)
[Note使用awk的方法也很有价值。
对于一个简单的CSV文件(不包含带引号的字符串的文件),awk
是一个很好的解决方案,Brian的答案也可以正常工作。如果您的CSV文件包含带引号的字符串,而这些字符串本身包含逗号,则如下所示:
h1,h2
"this, is, value, 1",value2
...然后awk
将翻倒。
如果要在Python中执行此操作,则没有理由使用DictReader
。这样的事情会起作用:
import csv
with open('mycsv.csv') as infd, open('mycsv.out', 'w') as outfd:
reader = csv.reader(infd)
writer = csv.writer(outfd)
# read the header
header = next(reader)
# modify the column title
header[1] = 'hTwo'
# write the new header out
writer.writerow(header)
# copy all other rows unmodified
for row in reader:
writer.writerow(row)
# and then rename mycsv.out to mycsv.csv if you wish.
awk oneliner:
awk -F, -v OFS=, 'NR==1 && $2=="h2" {$2="hTwo"};1' file
上面的内容很具体:它说:“如果第一行在第二个字段中包含'h2',则将其更改为'hTwo'”]
替换为sed
$ sed -i '1s/h2/HTwo/' mycsv.csv
解决它的一种方法是使用pop()
reader = csv.DictReader(open('mycsv.csv'))
for d in reader:
d['HTwo'] = d.pop('h2')