当前位置: 首页 > news >正文

py7zr解压文件时报错CrcError(crc32, f.crc32, f.filename)

报错信息

Traceback (most recent call last):File "/home/hp/project/test/file_util.py", line 130, in extract_archive_7zarchive.extract(targets=[fixed_file], path=output_dir, recursive=True)File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1025, in extractself._extract(path, targets, return_dict=False, recursive=recursive)File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 634, in _extractself.worker.extract(File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1266, in extractself.extract_single(File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1354, in extract_singleraise eFile "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1351, in extract_singleself._extract_single(fp, files, path, src_end, q, skip_notarget)File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1388, in _extract_singleself._check(fp, just_check, src_end)File "/home/hp/miniconda3/envs/celery/lib/python3.10/site-packages/py7zr/py7zr.py", line 1445, in _checkraise CrcError(crc32, f.crc32, f.filename)
py7zr.exceptions.CrcError: (599713723, 4127376704, 'valid/0001_JPEG.rf.9fcffd546df665288bd059e2975eb307.jpg')

代码如下:

def extract_archive_7z(archive_path: str, output_dir: str = ".", password: str = None):"""解压压缩文件使用 py7zr 解压 7z 格式压缩包,支持中文文件名。"""try:with py7zr.SevenZipFile(archive_path, mode='r', password=password) as archive:# 获取所有文件列表(用于进度条)all_files = archive.getnames()# 创建目标目录(若不存在)os.makedirs(output_dir, exist_ok=True)for file in tqdm(all_files, desc=f"解压 {os.path.basename(archive_path)}", unit="file"):fixed_file = fix_encoding(file)archive.extract(targets=[fixed_file], path=output_dir)logger.info(f"{archive_path} 解压完成")except Exception as e:logger.error(f"解压失败 {archive_path}: {e}", exc_info=True)

错误原因

py7zr 的archive.extract() 方法无法多次被调用

以下是修改后的代码:

def extract_archive_7z(archive_path: str, output_dir: str = ".", password: str = None):"""解压压缩文件使用 py7zr 解压 7z 格式压缩包,支持中文文件名。"""try:with py7zr.SevenZipFile(archive_path, mode='r', password=password) as archive:# 获取所有文件列表(用于进度条)all_files = archive.getnames()# 创建目标目录(若不存在)os.makedirs(output_dir, exist_ok=True)targets = []for file in tqdm(all_files, desc=f"解压 {os.path.basename(archive_path)}", unit="file"):targets = targets.append(file)archive.extract(targets=targets, path=output_dir) # 或使用extractAll()logger.info(f"{archive_path} 解压完成")except Exception as e:logger.error(f"解压失败 {archive_path}: {e}", exc_info=True)

参考:
https://github.com/miurahr/py7zr/issues/313

http://www.xdnf.cn/news/425953.html

相关文章:

  • 学习黑客Windows 卷影复制服务详解
  • SQL 索引优化指南:原理、知识点与实践案例
  • 深入理解 NumPy:Python 科学计算的基石
  • MCU程序加密保护(一)闪存读写保护法 加密与解密
  • Pycharm的终端执行allure命令出现command not found
  • 【计算机视觉】OpenCV实战项目:基于OpenCV与face_recognition的实时人脸识别系统深度解析
  • 物理:人的记忆是由基本粒子构成的吗?
  • 《类和对象(下)》
  • 抗量子计算攻击的数据安全体系构建:从理论突破到工程实践
  • FFmpeg 与 C++ 构建音视频处理全链路实战(三)—— FFmpeg 内存模型
  • Linux云计算训练营笔记day07(MySQL数据库)
  • 手搓传染病模型(SEIARW)
  • 内核深入学习3——分析ARM32和ARM64体系架构下的Linux内存区域示意图与页表的建立流程
  • Linux系统编程——进程
  • 现代化QML组件开发教程
  • UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互
  • DataWhale LLM
  • Python-简单网络编程 I
  • 前端学习(3)—— CSS实现热搜榜
  • 通过anaconda安装jupyter
  • uni-app学习笔记五-vue3响应式基础
  • 国标GB28181视频平台EasyGBS实现路况精准呈现,打造智慧出行新体验
  • 微信小程序 密码框改为text后不可见,需要点击一下
  • 基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计
  • k8s之k8s集群部署
  • 互信息与KL散度:差异与应用全解析
  • 基于C语言实现网络爬虫程序设计
  • Docker常用命令及示例大全
  • Rimworld Mod教程 武器Weapon篇 近战章 第二讲:生物可用的近战来源
  • Houdini安装SideFX Labs工具架