读取和写入CSV文件时出错

1 投票
3 回答
1279 浏览
提问于 2025-04-17 05:32

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

撰写回答