如何在csv DictReader中重命名键/标题

问题描述 投票:0回答:4

例如给定mycsv.csv文件

h1,h2
a,b
c,d

如何用h2HTwo重命名为reader

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

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

[Note使用awk的方法也很有价值。

python csv awk
4个回答
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
投票

awk oneliner:

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

上面的内容很具体:它说:“如果第一行在第二个字段中包含'h2',则将其更改为'hTwo'”]


1
投票

替换为sed

$ sed -i '1s/h2/HTwo/' mycsv.csv

1
投票

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

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

for d in reader:
   d['HTwo'] = d.pop('h2')
© www.soinside.com 2019 - 2024. All rights reserved.