读取大于2G的文件时出现MemoryError

时间:2013-09-04 06:53:12

标签: python

大小超过2G的单个文件。 我打电话给open(f, "rb").read() 的MemoryError。 我打电话给open(f, "rb").read(1<<30)

如何消除2G限制?我有足够的记忆--16G

3 个答案:

答案 0 :(得分:4)

使用内存映射文件(mmap)怎么样? documentation on python.org中有一个很好的例子。它改编如下。

with open(f, "rb") as fi:
    # memory-map the file, size 0 means whole file
    mm = mmap.mmap(fi.fileno(), 0)

    # Do stuff

    mm.close()

答案 1 :(得分:2)

正如@itaypk在评论中所说,32位可执行文件仅限于2GB的可访问内存(2 ^ 31)。为了利用额外的RAM,您需要运行64位版本的Python。

根据您对文件的操作,您可能不需要完全阅读。你可以逐步完成它:

with open('huge_file.txt') as f:
    for line in f:
       print line # print one line at a time

上述循环不会耗尽系统上的所有可用内存。

答案 2 :(得分:0)

即使您的文件可能只有2GB,读取它的开销也可能导致使用的内存远远超过2GB。