如何不保存本地Zip文件,从Web提取指定内容到指定路径?
在内存中处理登录后下载的Zip文件(无需本地存储)
当然可行!你完全可以跳过将Zip文件保存到本地的步骤,直接在内存里完成解析和特定内容的提取操作。核心思路是用io.BytesIO把下载到的二进制Zip内容包装成内存中的类文件对象,再交给zipfile.ZipFile处理即可。
修改后的完整代码
import re import requests import zipfile import io import werkzeug werkzeug.cached_property = werkzeug.utils.cached_property from robobrowser import RoboBrowser # 登录流程保持不变 br = RoboBrowser(history=True) br.open("loginurl") forms = br.get_forms() form = forms[0] form['username'] = 'myname' form['password'] = 'mypass' br.submit_form(form) # 下载Zip文件到内存(不写入本地磁盘) url = "ulrlocationofzipfiledownload" request = br.session.get(url, stream=True) # 用BytesIO将二进制内容转为内存可读取的类文件对象 zip_in_memory = io.BytesIO(request.content) # 处理内存中的Zip文件,提取特定内容 with zipfile.ZipFile(zip_in_memory, 'r') as zip_ref: # 示例1:提取单个特定文件到指定位置 zip_ref.extract("target_file.txt", path="/your/target/directory") # 示例2:直接读取特定文件内容(完全在内存中操作,不保存到本地) # with zip_ref.open("target_file.txt") as f: # file_content = f.read().decode('utf-8') # print(file_content) # 示例3:提取多个指定文件 # target_files = ["data.csv", "config.json"] # for file in target_files: # zip_ref.extract(file, path="/your/target/directory")
关键细节说明
io.BytesIO(request.content):这一步是核心,它把下载到的二进制Zip内容转换成了内存中的可读取文件对象,让zipfile.ZipFile可以直接处理,完全绕开本地磁盘存储。- 如果你不需要把文件保存到本地,只是想读取内容,可以用
zip_ref.open()直接打开文件并读取(注释里的示例2),全程在内存中完成,效率更高。 - 提取文件时,
path参数替换成你实际需要保存内容的目标路径即可。
内容的提问来源于stack exchange,提问作者mato200
相关产品推荐
相关产品推荐

