读取和写入CSV文件时出错
系统信息:
Python 2.7.2
MAC OSX 10.7.2
问题(背景):
我有一个很大的 '.csv' 文件(大约 1GB),需要进行一些小的编辑。第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]))
3 个回答
0
需要检查的事项:
你是在代码运行结束后查看这个吗?这样你才能确认文件已经被
.close()
或.flush()
处理过了。你那一行的数据有没有什么奇怪的地方,可能让它误以为文件的其他部分也是某个字段的数据?
你可能只保存了行中的某些列;不妨试试用
writer.writerow(line)
来保存整行数据...
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:])
1
在写完输出文件后,要么关闭这个文件,要么使用一个 with
的上下文,这样即使发生错误,文件也会自动关闭:
with open('path + 'write_file.csv', 'wb') as f:
writer = csv.writer(f)
for line in r:
...