Tre*_*rey 5 python csv enumerate bufferedreader
我正在尝试在 python 脚本中打开大型 .csv 文件(16k 行+,~15 列),但遇到了一些问题。
我使用内置的 open() 函数打开文件,然后使用输入文件声明一个 csv.DictReader 。循环的结构如下:
for (i, row) in enumerate(reader):
# do stuff (send serial packet, read response)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用的文件长度超过 20 行,该文件将打开,但在几次迭代后我会收到 ValueError: I/O 操作已关闭的文件。
我的想法是,我可能会耗尽内存(尽管 16k 行文件只有 8MB,而且我有 3GB 内存),在这种情况下,我希望我需要使用某种缓冲区来仅加载一次将文件存入内存。
我走在正确的轨道上吗?或者是否还有其他原因导致文件意外关闭?
编辑:大约有一半的时间我使用 11 行的 csv 运行此命令,它会给出 ValueError。错误并不总是发生在同一行
16k 行对于 3GB RAM 来说没什么,很可能你的问题是其他问题,例如你在其他进程中花费了太多时间,这会干扰打开的文件。只是为了确保速度,当你有 3GB 内存时,将整个文件加载到内存中,然后解析例如
import csv
import cStringIO
data = open("/tmp/1.csv").read()
reader = csv.DictReader(cStringIO.StringIO(data))
for row in reader:
print row
Run Code Online (Sandbox Code Playgroud)
至少你不应该遇到文件打开错误。
| 归档时间: |
|
| 查看次数: |
9738 次 |
| 最近记录: |