【问题标题】:How to rename key/header in csv DictReader如何在 csv DictReader 中重命名键/标题
【发布时间】:2016-05-05 22:13:27
【问题描述】:

例如给定mycsv.csv文件

h1,h2
a,b
c,d

如何使用readerh2 重命名为HTwo

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

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

注意 使用 awk 的方法也很重要。

【问题讨论】:

  • 这就是你想做的全部吗?我问是因为awk 会是一个更简单的解决方案。
  • @Brian awk 对于答案非常有效,特别是如果它被证明更简单......谢谢!

标签: python csv awk


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    reader = csv.DictReader(open('mycsv.csv'))
    
    for d in reader:
       d['HTwo'] = d.pop('h2')
    

    【讨论】:

      【解决方案3】:

      awk oneliner:

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

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

      【讨论】:

        【解决方案4】:

        sed就地替换

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-29
          • 1970-01-01
          • 2013-06-01
          • 2010-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-27
          相关资源
          最近更新 更多