0

我编写了以下代码来读取.rar文件以检查它们是否包含 MDF 文件。

from unrar import rarfile

def is_contain_mdf_file(filepath) -> bool:
    try:
        if rarfile.is_rarfile(filepath):
            obj = rarfile.RarFile(filepath)
            members = obj.namelist()
            for member in members:
                content = obj.read(member)
                if content.startswith(b'MDF'):
                    return True
    except Exception as ex:
        print("Error while reading archived file %s", filepath, ex)
    return False

读取仅包含一个大小为 627MB 的 MDF 文件的 rar 文件时会多次引发以下错误。但是仍然执行检查(如果文件以“MDF”开头)

Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 232, in 'calling callback function'
  File ".....\python\venv37\lib\site-packages\unrar\rarfile.py", line 110, in _callback
    self._data += chunk
MemoryError

为什么我会收到错误,我该如何防止它?系统有足够的内存来处理大文件。

操作系统:Windows 10
Python 3.7 版

4

1 回答 1

0

如果您收到意外的 MemoryError 并且您认为应该有足够的 RAM 可用,这可能是因为您使用的是 32 位 python 安装。

如果您有 64 位操作系统,简单的解决方案是切换到 64 位安装的 python。

问题是 32 位 python 只能访问 ~4GB 的 RAM。如果您的操作系统是 32 位,由于操作系统开销,这可能会进一步缩小。

您可以在此处了解有关 32 位操作系统限制为 ~4GB RAM 的更多信息:https ://superuser.com/questions/372881/is-there-a-technical-reason-why-32-bit-windows- is-limited-to-4gb-of-ram

于 2020-07-24T11:36:40.323 回答