问题 Python可以打开的文件的最大大小?


我在Python中打开了一个8 MB的文件,因为我想批量更改各种类型的文件名。我经历并将文件加载到一个字符串中并使用字符串方法replace来替换所有内容。然后我注意到只有一半的文件被替换了;好像Python没有完全打开文件。

是否存在某种字符串大小限制或最大文件大小限制,我必须在Python的范围内播放?

请参阅中的代码 Python搜索和替换没有正确替换

我已更改为建议的代码。缓冲区是一个8 MB的HTML文件,超过150k行。替换代码完美无缺;只是它并没有取代一切。或者例如一个痛苦的错误是:

当我试图将字符串ff10替换为FF-10时,它将被更改为FF-010。


11883
2017-08-20 20:05


起源

您可以打开任何大小的文件,但是当您读取整个文件时,可能会发生MemoryOverflow,因为32Bit系统每个进程只能分配2GB,或者您可能没有足够的内存。 - Niklas R
显示给你问题的代码,这样你就可以获得一个更有用的答案,而不仅仅是告诉你猜测是否正确。 :) - Rosh Oxymoron
添加了我的代码链接 - nobody
你的代码有问题。情况x == 1将始终匹配,因此您最终得到FF-010。使用正确的字符串替换功能或读取正则表达式和/或最长前缀匹配。 - Arne
你在使用Windows吗?你是以二进制模式打开文件?如果没有,试着...... - Gandaro


答案:


不,Python可以打开的文件大小没有可达的最大值。 8 MB是  用现代术语来说。你在某处弄错了。

人们经常加载 千兆字节 数据到内存中。根据计算机的RAM,无论是64位还是32位操作系统和处理器,实际最大值可能是1 GB之前的任何值 MemoryError

作为测试,我只是将一个350 MB的文件加载到一个字符串中。只花了几秒钟。然后我把它写回一个文件。这花了一点时间。然后我对文件进行了哈希处理。两者是相同的。

在您达到RAM,操作系统或处理器的限制之前,Python对大字符串没有任何问题。

你说你“通过并将文件加载到一个字符串中” - 这听起来像是你可能犯错的第一个地方。要将文件加载到字符串中,您就可以了 fileobject.read()。如果你采取其他方式,这可能是问题。


14
2017-08-20 20:08



字符串怎么样? - nobody
@nobody看到我对你的问题的评论 - Niklas R
我做了一个测试,并将结果添加到我的答案中。 - agf
@Niklas取决于你的电脑,你可以得到一个 MemoryError 正如我所提到的,尺寸小于2gb。 - agf
不鼓励使用@Peter Trivial编辑。当人们纠正错误时,我很感激,但你所做的改变并没有影响任何人对这个问题的理解。 - agf