如何在csv DictReader中重命名密钥/标头

时间:2016-01-28 13:42:53

标签: python csv awk

例如给定mycsv.csv文件

h1,h2
a,b
c,d

如何使用h2

HTwo重命名为reader
reader = csv.DictReader(open('mycsv.csv'))

(另外如何用更新的标题写回csv文件。)

使用awk的

注意方法也很重要。

4 个答案:

答案 0 :(得分:3)

对于一个简单的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.

答案 1 :(得分:1)

awk oneliner:

awk -F, -v OFS=, 'NR==1 && $2=="h2" {$2="hTwo"};1' file

以上是非常具体的:它说"如果第一行包含' h2'在第二个字段中,将其更改为' hTwo'

答案 2 :(得分:1)

使用sed

进行替换
$ sed -i '1s/h2/HTwo/' mycsv.csv

答案 3 :(得分:1)

一种解决方法是使用pop()

reader = csv.DictReader(open('mycsv.csv'))

for d in reader:
   d['HTwo'] = d.pop('h2')