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')