大小大于 2G 的单个文件。我打电话给open(f, "rb").read()
内存错误。我打电话open(f, "rb").read(1<<30)
OK
如何消除 2G 限制?我有足够的内存——16G
大小大于 2G 的单个文件。我打电话给open(f, "rb").read()
内存错误。我打电话open(f, "rb").read(1<<30)
OK
如何消除 2G 限制?我有足够的内存——16G
使用内存映射文件 ( 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()
正如@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
上述循环不会耗尽系统上的所有可用内存。
即使您的文件可能只有 2GB,读取它的开销也可能导致使用的内存远远超过 2GB。