我在python中打开了一个8 MB的文件,因为我想批量更改各种类型的文件名。我检查并将文件加载到一个字符串中,然后使用字符串方法replace替换所有内容。然后我注意到只有一半的文件被替换;就好像python没有完全打开文件一样。
在python中,是否有某种类型的字符串大小限制或最大文件大小限制?
请参阅python search中的代码,替换未正确替换的代码。
我已改为建议的代码。缓冲区是一个超过150k行的8 MB HTML文件。替换代码工作得很好;只是它没有替换所有的东西。或者例如,一个痛苦的错误是:
当我试图将字符串ff10替换为ff-10时,它将被更改为ff-010。
您可以打开任意大小的文件,但是当您读取整个文件时,内存溢出可能会发生,因为32位系统只能为每个进程分配2GB,或者您可能没有足够的内存。
展示给你问题的代码,这样你就可以得到比简单地告诉你猜测是否正确更有用的答案。:)
添加到我的代码的链接
你的代码有问题。案例x==1总是先匹配,所以最后是FF-010。使用正确的字符串替换函数或读取regexps和/或最长前缀匹配。
你在用窗户吗?是否以二进制模式打开文件?如果没有,尝试…
不,在python可以打开的文件大小上没有可达到的最大值。就现代而言,8 MB是很小的。你在某个地方犯了个错误。
人们经常将千兆字节的数据加载到内存中。根据计算机的RAM(无论是64位还是32位操作系统和处理器)的不同,在获得MemoryError之前,实际最大值可能在1 GB以上。
作为测试,我刚刚将一个350 MB的文件加载到一个字符串中。只花了几秒钟。然后我把它写回一个文件。这花了更长的时间。然后我对文件进行了哈希处理。两者是相同的。
在达到RAM、操作系统或处理器的极限之前,python对大字符串没有任何问题。
你说你"通过并将文件加载到一个字符串中"——这听起来像是你第一次犯错误。要将文件加载到字符串中,只需执行fileobject.read()。如果你换个方法,那可能是问题所在。
那弦乐呢?
@没人看到我对你问题的评论
我做了一个测试,并将结果添加到我的答案中。
@Niklas根据你的电脑,你可以得到一个尺寸小于2GB的MemoryError,如我所提到的。
@彼得的琐碎编辑是不鼓励的。我很感激人们改正错误,但是你所做的改变并没有影响到任何人对这个问题的理解。