0

大小大于 2G 的单个文件。我打电话给open(f, "rb").read() 内存错误。我打电话open(f, "rb").read(1<<30) OK

如何消除 2G 限制?我有足够的内存——16G

4

3 回答 3

4

使用内存映射文件 ( mmap) 怎么样?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()
于 2013-09-04T06:59:32.117 回答
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

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

于 2013-09-04T07:00:34.543 回答
0

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

于 2013-09-04T06:56:32.193 回答