Python 读取大于2G的文件时的内存错误

Python 读取大于2G的文件时的内存错误,python,Python,大小大于2G的单个文件。 我调用open(f,“rb”).read() 回忆者。 我把open(f,“rb”).read(1即使你的文件可能只有2GB,读入它的开销可能会导致使用的内存远远超过2GB。即使你的文件可能只有2GB,读入它的开销可能会导致使用的内存远远超过2GB。如何使用内存映射文件()?中有一个很好的例子。下面对其进行了改编 with open(f, "rb") as fi: # memory-map the file, size 0 means whole file

大小大于2G的单个文件。 我调用
open(f,“rb”).read()
回忆者。
我把
open(f,“rb”).read(1即使你的文件可能只有2GB,读入它的开销可能会导致使用的内存远远超过2GB。

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

如何使用内存映射文件()?中有一个很好的例子。下面对其进行了改编

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()

如何使用内存映射文件()?中有一个很好的示例。下面对其进行了改编

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

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

正如@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

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

对于32位运行的程序,进程有限(可访问)2GB的工作内存。除非以64位运行,否则无法克服此限制。为什么需要一次读取整个2GB文件?不能改为以小批量处理它吗?例如,使用文件作为迭代器,可以逐行读取数据。@MartijnPieters只是为了测试读取磁盘的效率。但是请获取MemoryError for file>2G,因此我将其更改为1G(1@Itaypk是的,我的操作系统是win7 64位,但python是32位。对于运行在32位的程序,进程有限制(可访问)2GB的工作内存。除非以64位运行,否则无法克服此限制。为什么需要一次读取整个2GB文件?不能改为以小批量处理它吗?例如,使用文件作为迭代器,可以逐行读取数据。@MartijnPieters只是为了测试读取磁盘的效率。但是请获取MemoryError for file>2G,因此我将其更改为1G(1@Itaypk是的,我的操作系统是win7 64位,但python是32位。你为什么会这样认为?你为什么会这样认为?