【问题标题】:Python: Reformat CSV filePython:重新格式化 CSV 文件
【发布时间】:2015-12-07 03:31:54
【问题描述】:

我有一个这样的 CSV 文件:

Additional,0        
No     1284         
Yes      44 
Total count,1286
gender,0        
Female    918           
Male      904           
Total count,1822

每当第 2 列中有 0 时(如性别和附加后的 0),我想开始将其重新格式化为:

Additional,1286     
No,1284         
Yes,44 
gender,1822     
Female,918          
Male,904    

我该怎么做?感谢您对此提供的任何帮助。

【问题讨论】:

  • 就列数而言,这甚至不是有效的 csv。 “No”、“Yes”、“Female”和“Male”甚至没有用逗号正确分隔。这些新价值从何而来?
  • 女性 918 在同一个牢房中。它来自不同的脚本,我只得到 CSV 文件而不是生成它的脚本。总计数是从另一组 CSV 文件计算的唯一值的计数。 @CodyBouche
  • “我该怎么做?” 一个好的起点是编写一些代码,在 SO 中提出问题并向我们展示您到目前为止所做的尝试,如果您是卡在您遇到的一些问题/错误中......

标签: python csv format reformat


【解决方案1】:

文件.csv

Additional,0        
No,1284         
Yes,44 
Total count,1286
gender,0        
Female,918           
Male,904           
Total count,1822

代码

import csv

with open('file.csv', 'rb') as csvread:
    reader = csv.reader(csvread)
    with open('out.csv', 'wb') as csvwrite:
        writer = csv.writer(csvwrite)
        for row in reader:
            frow = []
            for i, val in enumerate(row):
                val = val.strip()
                if val.isdigit():
                    val = int(val)
                if i == 1 and val == 0:
                    if frow[0] == 'Additional':
                         val = 'something'
                    elif frow[0] == 'gender':
                         val = 'something else'
                frow.append(val)
            writer.writerow(frow)

【讨论】:

  • 非常感谢。但我不能硬编码这些值。有很多。
  • 好吧,你从未指定要映射的外部文件,所以我无法知道如何映射...
  • 我也没有外部文件。我只有这个格式很差的文件。
  • 好的,如果你想动态替换这些“0”值,那么你可以硬编码逻辑,或者必须有另一个文件你从中获取数据......
猜你喜欢
  • 2016-10-04
  • 2020-10-28
  • 2018-12-08
  • 1970-01-01
  • 2015-11-09
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
相关资源
最近更新 更多