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

Python3 CGI脚本接收application/zip格式ZIP文件处理报错求助

解决CGI接收ZIP文件并提取XML的问题

你的问题出在没有将读取到的字节数据包装成类文件对象,且错误调用了zipfile.ZipFile.open方法——ZipFile.open是实例方法,需要先创建ZipFile实例,而非直接传入字节或字符串。

修正步骤

  1. 用io.BytesIO将读取到的字节数据包装成可随机访问的类文件对象,因为ZipFile需要能定位文件指针的输入源;
  2. 实例化ZipFile对象,传入包装后的类文件对象;
  3. 通过ZipFile.open打开目标XML文件,再传递给pd.read_xml。

修正后的代码

import sys
import io
import zipfile
import pandas as pd

# 读取请求体的字节数据
archive_bytes = sys.stdin.buffer.read()
# 包装成类文件对象
archive_file = io.BytesIO(archive_bytes)

# 实例化ZipFile并打开内部XML
with zipfile.ZipFile(archive_file, 'r') as zip_ref:
    with zip_ref.open("apple_health_export/export.xml") as xml_file:
        df = pd.read_xml(
            xml_file,
            xpath="//Record[contains(@type,'HKQuantity')]",
            attrs_only=True
        )

错误原因解释

  • 用sys.stdin.read()得到的是字符串,ZipFile无法直接处理字符串,且字符串没有文件对象的fp属性;
  • 用sys.stdin.buffer.read()得到的是字节,但字节同样不是类文件对象,缺少ZipFile所需的文件操作方法(比如seek、特定实现的read);
  • 必须通过BytesIO将字节转换为类文件对象,才能被ZipFile正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:12:37