【问题标题】:Python CSV Writer trimming leading zerosPython CSV Writer修剪前导零
【发布时间】:2012-03-22 09:59:50
【问题描述】:

我正在用 python 读取一个 csv 文件,更改一些值,然后将其写回。我使用以下方式读取文件:

bomReader = csv.reader( open( args.filename, 'rb' ), delimiter=',' )
for row in bomReader:
    #do stuff

其中一个字段包含诸如0406 之类的值,其中前导零很重要。读取 csv 文件后,如果我使用 print row[2] 打印此字段,它会以前导 0 正确显示。

但是,当我将其写回新的 csv 文件时,输出没有前导零。我认为这是因为它被认为是一个 int 并且前导零被修剪。由于我不能在 csv.writer writeRow() 函数中使用格式说明符,防止这种行为的正确方法是什么?

代码:

bomReader = csv.reader( open( args.filename, 'rb' ), delimiter=',' )
bomWriter = csv.writer(open(outfile, 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for row in bomReader:
try:
    qty = int(row[3])
    if (qty > 0):
        cs = row[4].split(';')
        for each in cs:
            bomWriter.writerow([row[0],row[1], row[2],'1',each.strip(),row[5],row[6],row[7],row[8],row[9]])
    elif (qty == 0):
        print "Deleted line"
    else:
        bomWriter.writerow(row)
except ValueError:
        bomWriter.writerow(row)

来自输入 csv 文件的示例行:

1007,C,0406,2,C456;C219,ANY,,,,,,

输出 csv 文件中的行:

1007,C,406,1,C456,ANY,,,,
1007,C,406,1,C219,ANY,,,,

【问题讨论】:

  • csv 模块忽略了某事物是否可能是 int 并将所有内容视为字符串。你能发布你的整个相关代码吗?
  • 已添加。正在丢失前导零的相关字段是 row[2]
  • 能否请您提供 csv 数据,以便我们在系统中创建相同的问题?
  • 检查没有row[2] = int(row[2])。如果您row[3] = '1'; row[4] = each.strip() 并始终使用.writerow(row),代码可能会更简单。 each 也不是很具描述性的名称。

标签: python csv python-2.7


【解决方案1】:

您提供的代码在Python 2.6.7Python 2.7.2csv.__version=='1.0' 下可以正常工作。输出:

1007,C,0406,1,C456,ANY,,,,
1007,C,0406,1,C219,ANY,,,,

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多