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

如何用Python读取7z压缩包内的txt文件?

解决py7zr读取7z压缩包内文件的问题

错误原因分析

  1. 第一种方法报错(无open属性):py7zr的SevenZipFile类没有open方法,这是混淆了zipfile等其他压缩库的API导致的。
  2. 第二种方法报错(路径属性过多):
    • extract方法的参数传递不符合py7zr要求,单个文件提取时需明确指定members参数(或传入列表形式);
    • 直接用字符串拼接路径易引发跨平台或路径格式错误;
    • 可能存在压缩包内文件实际路径与你指定的helloWorld.txt不符的情况(比如文件嵌套在子目录中)。

正确解决方案

方案1:直接读取文件内容(无需提取到本地)

使用py7zr提供的read()或extractfile()方法直接获取文件内容:

import py7zr

archive_path = 'FolderWorld.7z'
mnf_file_path = 'helloWorld.txt'

with py7zr.SevenZipFile(archive_path, mode='r') as z:
    # 方式A:直接读取字节内容后解码
    content_bytes = z.read(mnf_file_path)
    print(content_bytes.decode('utf-8'))  # 根据文件编码调整decode参数

    # 方式B:通过extractfile获取文件对象读取
    with z.extractfile(mnf_file_path) as f:
        content = f.read().decode('utf-8')
        print(content)

方案2:提取到临时目录后读取

修正extract方法的参数传递,并使用os.path.join处理路径:

import py7zr
import tempfile
import os

archive_path = 'FolderWorld.7z'
mnf_file_path = 'helloWorld.txt'

with py7zr.SevenZipFile(archive_path, mode='r') as z:
    with tempfile.TemporaryDirectory() as tmp_dir:
        # 提取指定文件到临时目录,members参数传入文件路径列表
        z.extract(members=[mnf_file_path], path=tmp_dir)
        
        # 用os.path.join拼接路径,避免跨平台问题
        extracted_file_path = os.path.join(tmp_dir, mnf_file_path)
        with open(extracted_file_path, 'r', encoding='utf-8') as mnf_file:
            mnf_content = mnf_file.read()
            print(mnf_content)

额外注意事项

  • 确认压缩包内的文件路径完全匹配mnf_file_path,如果文件在子目录中,需传入完整路径(如sub_folder/helloWorld.txt);
  • 根据文件实际编码调整decode()或open()中的encoding参数,避免乱码。

内容的提问来源于stack exchange,提问作者patrick001p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:13:30