Python 如何在csv DictReader中重命名键/头
例如给定的Python 如何在csv DictReader中重命名键/头,python,csv,awk,Python,Csv,Awk,例如给定的mycsv.csv文件 h1,h2 a,b c,d 如何使用读卡器将h2重命名为HTwo reader = csv.DictReader(open('mycsv.csv')) (另外,如何使用更新的标题写回csv文件。) 注意使用awk的方法也很重要。awk oneliner: awk -F, -v OFS=, 'NR==1 && $2=="h2" {$2="hTwo"};1' file 上面的内容非常具体:它说“如果第一行在第二个字段中包含'h2',将其更改为'
mycsv.csv
文件
h1,h2
a,b
c,d
如何使用读卡器将h2
重命名为HTwo
reader = csv.DictReader(open('mycsv.csv'))
(另外,如何使用更新的标题写回csv文件。)
注意使用awk的方法也很重要。awk oneliner:
awk -F, -v OFS=, 'NR==1 && $2=="h2" {$2="hTwo"};1' file
上面的内容非常具体:它说“如果第一行在第二个字段中包含'h2',将其更改为'hTwo'”对于一个简单的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.
使用sed进行就地更换
$ sed -i '1s/h2/HTwo/' mycsv.csv
解决此问题的一种方法是使用pop()
这就是你想要做的吗?我这样问是因为awk
将是一个更简单的解决方案。@Brian awk的回答非常有效,特别是如果它被证明更简单的话。。。谢谢
reader = csv.DictReader(open('mycsv.csv'))
for d in reader:
d['HTwo'] = d.pop('h2')