读取和编写csv文件到python时出错

时间:2011-11-02 22:02:19

标签: python

系统信息:
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]))

3 个答案:

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