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

如何不保存本地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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:37:52