【问题标题】:Max size of a file Python can open?Python可以打开的文件的最大大小?
【发布时间】:2011-10-31 08:25:32
【问题描述】:

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

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

参考Python search and replace not replacing properly中的代码。

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

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

【问题讨论】:

  • 您可以打开任意大小的文件,但是当您读取整个文件时,可能会发生 MemoryOverflow,因为 32Bit 系统每个进程只能分配 2GB,或者您可能没有足够的内存。
  • 显示给出问题的代码,这样您可以获得比简单地告诉您猜测是否正确的答案更有用的答案。 :)
  • 你的代码有问题。 case x==1 总是首先匹配,所以你最终得到 FF-010。使用正确的字符串替换函数或阅读正则表达式和/或最长前缀匹配。
  • 您使用的是 Windows 吗?您是否以二进制模式打开文件?如果没有,请尝试……

标签: python string limit


【解决方案1】:

不,Python 可以打开的文件大小没有可达到的最大值。 8 MB 在现代术语中很小。你在某个地方犯了错误。

人们定期将 千兆字节 的数据加载到内存中。根据您计算机的 RAM,无论是 64 位还是 32 位操作系统和处理器,在您获得MemoryError 之前,您的实际最大内存可能在 1 GB 以上。

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

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

您说您“通过并将文件加载到字符串中”——这听起来像是您可能犯的第一个错误。要将文件加载到字符串中,只需执行fileobject.read()。如果您以其他方式进行操作,那可能就是问题所在。

【讨论】:

  • @nobody 看到我对你的问题的评论
  • 我做了一个测试并将结果添加到我的答案中。
  • @Niklas 根据您的计算机,您可以获得小于 2gb 的 MemoryError,正如我所提到的。
  • @Peter 不鼓励进行琐碎的编辑。当人们纠正错误时,我很感激,但您所做的更改并没有影响任何人对问题的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多