如何用Python从十六进制字符串解压Zip格式XML文件?
解决Zip解压时的BadZipFile错误:十六进制字符串转二进制数据处理
错误根源:你当前的代码用
io.StringIO处理十六进制字符串,但zipfile.ZipFile仅支持二进制流输入,且十六进制字符串本身不是Zip的原始二进制数据,必须先完成格式转换。正确处理步骤:
- 使用
bytes.fromhex()将十六进制字符串解码为Zip格式对应的二进制字节 - 用
io.BytesIO包装二进制字节,生成符合要求的二进制流 - 传入
zipfile.ZipFile进行解压操作
- 使用
完整代码示例:
import zipfile import io original_zip_data = "504B030414..." # 你的十六进制字符串 # 十六进制字符串转二进制字节 zip_bytes = bytes.fromhex(original_zip_data) # 生成二进制流对象 file_stream = io.BytesIO(zip_bytes) try: with zipfile.ZipFile(file_stream, 'r') as myzipfile: # 打印压缩包内的文件名称列表 print("压缩包内文件:", myzipfile.namelist()) # 读取并解析XML文件(替换为你实际的文件名) with myzipfile.open("你的文件名.xml") as xml_file: xml_content = xml_file.read().decode('utf-8') print(xml_content) except zipfile.BadZipFile: print("转换后仍无法识别为有效Zip文件,可能原始十六进制字符串已损坏、截断或本身不是Zip格式数据")
- 额外说明:开头的
504B对应Zip文件的签名PK,说明原始数据大概率是Zip格式,但如果转换后仍报错,需检查十六进制字符串是否完整、是否存在字符错误(比如非十六进制字符)。
内容的提问来源于stack exchange,提问作者NScara
相关产品推荐
相关产品推荐

