2011-11-02 67 views
1

系统信息:
的Python 2.7.2
MAC OSX 10.7.2错误阅读和写作的CSV文件到蟒蛇

问题(+背景):
我有一个大的“.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

为什么在二进制模式下打开文件? – Andrey

+0

你可以给一个文件的例子吗? – chown

+1

什么是错误信息? – ktdrv

回答

1

要么写它后关闭输出文件,或撰写with方面的输出,即使发生错误,这将永远关闭文件:

with open('path + 'write_file.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for line in r: 
     ... 
+0

这解决了这个问题。非常感谢你的帮助!! – nfisher

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:])