如何用Python读取7z压缩包内的txt文件?
解决py7zr读取7z压缩包内文件的问题
错误原因分析
- 第一种方法报错(无open属性):py7zr的
SevenZipFile类没有open方法,这是混淆了zipfile等其他压缩库的API导致的。 - 第二种方法报错(路径属性过多):
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
相关产品推荐
相关产品推荐

