【发布时间】: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