如何使用Python从嵌套zip压缩包中提取内层txt文本文件
嵌套ZIP压缩包目标文件提取实现方案
你原来的代码仅能解压外层abc.zip的内容,但是不会自动处理内层的n.zip压缩包,需要额外读取内层压缩包才能提取到Final.txt,以下是两种可行实现方案:
方案一:内存流读取(无需生成临时文件)
直接读取外层压缩包中n.zip的字节流,在内存中解析内层压缩包提取目标文件,无需额外写入临时文件,效率更高:
import zipfile import io # 外层压缩包路径,若和脚本同目录直接写文件名即可 outer_zip_path = "abc.zip" # 内层压缩包在外层包中的文件名 inner_zip_name = "n.zip" # 目标文件在内层压缩包中的文件名 target_file_name = "Final.txt" with zipfile.ZipFile(outer_zip_path, 'r') as outer_zip: # 读取内层压缩包的字节流 with outer_zip.open(inner_zip_name) as inner_bytes: # 解析内层压缩包 with zipfile.ZipFile(io.BytesIO(inner_bytes.read())) as inner_zip: # 提取目标文件到指定目录,需提取到当前目录可将path改为"./"即可 inner_zip.extract(target_file_name, path="./extract_result")
方案二:先解压外层再读取内层(适合需要保留中间文件的场景)
如果需要同时保留外层解压出来的n.zip等文件,可以先把外层压缩包解压到临时目录,再读取内层压缩包提取目标文件:
import zipfile import os import shutil outer_zip_path = "abc.zip" temp_extract_dir = "./temp_outer_extract" target_file_name = "Final.txt" # 解压外层压缩包 with zipfile.ZipFile(outer_zip_path, 'r') as outer_zip: outer_zip.extractall(temp_extract_dir) # 读取内层压缩包提取目标文件 inner_zip_path = os.path.join(temp_extract_dir, "n.zip") with zipfile.ZipFile(inner_zip_path, 'r') as inner_zip: inner_zip.extract(target_file_name, path="./") # 可选:删除临时解压的外层文件 # shutil.rmtree(temp_extract_dir)
注意事项
- 注意核对文件名拼写,你给出的压缩包结构中标注的是
Final.text,需求里写的是Final.txt,要和压缩包内实际文件名保持一致,否则会触发文件不存在的报错 - 你原代码中写的外层压缩包路径为
/abc.zip/是根目录绝对路径,如果abc.zip存放在脚本运行的同级目录下,直接写abc.zip即可
内容的提问来源于stack exchange,提问作者user14784453
相关产品推荐
相关产品推荐

