系统信息:
Python 2.7.2
MAC OSX 10.7.2
问题(+背景):
我有一个很大的'.csv'文件(~1演出)需要一些小编辑。第5列中的每个值都需要5个字符长(有些长度为4个字符,并且需要在它们前面放置一个“0”)。代码(如下所示)在运行时报告没有错误,但是在文件中停止写入大约100行(从而丢失一些关键数据!)。任何人都知道为什么会这样吗?
我重新创建了'read_file.csv'并检查了它,但我没有看到任何不合适的地方。代码总是在同一个位置中止,但我不明白为什么?
import csv
path = '/Volumes/.../'
r = csv.reader(open(path + 'read_file.csv','rU'))
f = open(path + 'write_file.csv', 'wb')
writer = csv.writer(f)
for line in r:
if len(line[5]) == 4:
line[5] = '0' + line[5]
writer.writerow((line[0],line[1],line[2],line[3],line[4],line[5],line[6],line[7]))
答案 0 :(得分:1)
写入后关闭输出文件,或者在with
上下文中写入输出,即使发生错误也会关闭文件:
with open('path + 'write_file.csv', 'wb') as f:
writer = csv.writer(f)
for line in r:
...
答案 1 :(得分:0)
要检查的事项:
您是否在代码退出后进行了检查,因此您知道该文件已被.close()
或.flush()
编辑?
您的数据中是否有可能存在奇怪的内容,使其认为文件的其余部分是字段中的数据?
您只保存一行的一定数量的列;您可以尝试writer.writerow(line)
而不是......
答案 2 :(得分:0)
确保文件已正确关闭,with
可以轻松完成。
with open('test.csv', 'rU') as inp:
csvin=csv.reader(inp)
with open('output.csv', 'wb') as outp:
csvout=csv.writer(outp)
for line in csvin:
csvout.writerow(line[:4] + [line[4].rjust(5, '0')] + line[5:])