2014-09-25 78 views
1

我想读取5GB文件中以文本格式存储的数据。当我尝试使用此代码读取文件的内容:尝试加载5GB文本文件时发生Python MemoryError

file = open('../data/entries_en.txt', 'r') 
data = file.readlines() 

发生错误: 数据= file.readlines() 的MemoryError 我的笔记本电脑拥有8GB内存和至少4GB是空的,当我想运行程序。但是当我监视系统性能时,当python使用大约1.5GB内存时,会发生此错误。
我使用python 2.7,但是如果它很重要,请告诉我解决方案为2.x和3.x 我该怎么做才能阅读这个文件?

+0

Python版本?另外,你为什么一次全部阅读?最后,如果你真的想这么做,'list(file)'更现代化,更“惯用”。 – Veedrac 2014-09-25 06:49:20

+1

什么操作系统? 64位?或32位? Python是编译为64位还是32位二进制文​​件? – 2014-09-25 07:57:27

回答

3

为您处理大型文件将是最好的方式 - 因为你试图太大的文件直接加载到内存

with open('../file.txt', 'r') as f: 
    for line in f: 
     # do stuff 

readlines()会出错。上面的代码会在你完成处理后自动关闭你的文件。

+0

如果我有100 GB内存并且想要执行'readlines()',该怎么办?它会不会起作用?任何解决方法呢? – hyades 2014-09-25 07:39:54

+0

这取决于您的操作系统 - 并非所有的操作系​​统都可以让您完全访问每个进程的所有内存。我相信每个进程的32位O/S限制为4GB。每行处理或每个“块”处理可能效率更高。 – 2014-09-25 08:03:54

2

如果你要处理的文件中的行,你应该宁愿使用:

for line in file: 
    # do something with the line 

它会读取而不是一次所有读的RAM由行的文件行。

相关问题