You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用zipfile/rarfile/py7zr检测归档损坏的异常汇总

归档文件完整性检测:各Python库损坏相关异常整理

背景

从NexusMods下载了424个总大小21.576GiB的文件,因非高级用户受限速,平均下载速度1MiB/s,耗时超6小时,通过自制Python脚本批量下载。

下载链接生成核心代码如下:

import contextlib
import json
import requests
from socket import gaierror
from requests import RequestException
from urllib3.exceptions import HTTPError

DOWNLOAD_LINK_GENERATOR = (
    "https://www.nexusmods.com/Core/Libs/Common/Managers/Downloads?GenerateDownloadUrl"
)

while True:
    with contextlib.suppress(
        RequestException, HTTPError, gaierror, TimeoutError
    ):
        url = json.loads(requests.post(
            url=DOWNLOAD_LINK_GENERATOR,
            data={"fid": file_id, "game_id": game_id},
            headers=HEADERS,
            cookies=COOKIES,
            timeout=1,
       ).content)["url"]

注:COOKIES和HEADERS为从文件加载的常量,file_id和game_id是NexusMods的文件与游戏ID。文件通过requests.get(url, stream=True)下载,此前使用aiohttp、asyncio、aiofiles实现多协程分块下载,因突发问题改用单线程方式。

受网络环境及NexusMods服务性能下降影响,下载过程易受干扰,且重写代码时移除了大量校验机制,因此怀疑部分文件损坏。所有文件均为.zip、.rar或.7z格式(部分.dazip为重命名的.zip),已通过代码验证魔数:zip文件为b'PK\x03\x04',7z为b"7z\xbc\xaf'\x1c",rar为b'Rar!\x1a\x07'。计划用Python异步批量提取文件,但因归档结构混乱、存在冗余文件,需自行编写代码实现精准控制,因此需提前检测文件完整性。

各库损坏相关异常汇总

使用rarfile.RarFile、py7zr.SevenZipFile、zipfile.ZipFile分别处理对应格式,通过testrar()、test()、testzip()方法检测完整性,完好归档无返回值,损坏归档触发的相关异常如下:

rarfile库

  • 当文件损坏(如修改文件长度)时,调用testrar()会抛出rarfile.BadRarFile异常,提示通常为"read failed"或"Corrupt file"。

py7zr库

  • 当文件长度被修改时,初始化SevenZipFile对象会直接抛出py7zr.Bad7zFile异常;
  • 文件长度未修改但内容损坏时,调用test()无返回,但调用testzip()会抛出LZMAError: Corrupt input data异常。

zipfile库

  • 当文件长度被修改时,调用testzip()会抛出OSError异常;
  • 文件长度未修改但内容损坏时,存在两种情况:
    • 返回损坏的文件名;
    • 抛出解压缩相关异常(如zipfile.LZMAError、zipfile.BadZipFile等)。

内容的提问来源于stack exchange,提问作者Ξένη Γήινος

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:21:16