【发布时间】:2021-10-29 14:51:45
【问题描述】:
我很小心,不会一次将大文件加载到内存中。我宁愿逐行阅读。但是,我无法弄清楚为什么在读取某些行(索引:32671363)后出现内存错误?
最小的例子如下。我之前尝试过包含更大文件的代码,但从未收到此错误。在索引 32671363 之后文件可能已损坏。但是我怎样才能找出坏行/字符或导致它的任何原因(我不能只打开文本文件并查看它,因为它是 14 GB!) ?我尝试在控制台上打印每一行,但输出没有告诉我任何信息(见下文)。关于如何深入挖掘的任何建议?
我尝试了 pandas(以块/数据帧的形式读取数据),在这个索引处给了我类似的内存错误。
with open('filename.txt', 'r') as f0:
for i, line in enumerate(f0):
if i > 32671360:
print(i, repr(line))
else:
pass
样本输出
32671361 '239,7449657815100,6998.258682,7449.502713\n'
32671362 '263,7449658092300,6998.258682,7449.502713\n'
32671363 '423,7449658212000,6998.258682,7449.502713\n'
Traceback (most recent call last):
File "read_lst_line.py", line 48, in <module>
for i, line in enumerate(f0):
MemoryError
【问题讨论】:
-
sys.stdout重定向了吗? -
实际上 - 之后文件中是否可能不再有换行符?如果单行占用的内存超过(您的 RAM)字节,您可能会耗尽内存。
-
标准 Unix 工具
wc可能会提供信息。 -
代替
print(i, repr(line)),也许试试print(f0.read(1000)); break。 -
@don'ttalkjustcode:谢谢。我试过看看:
b'263,7449658092300,6998.258682,7449.502713\r\n423,7449658212000,6998.258682,7449.502713\r\n1786,7449658285900,699\x00\x00\x00\x00\x00` and then a Memory Error. The\x00` 字符还在继续,不知道那是什么?有没有办法确定在几个尾随\x00之后是否有一些有用的数据?
标签: python pandas memory large-data large-files