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

使用Python pandas将.xml转.xlsx时报BadZipFile错误该如何解决

问题原因

直接修改后缀名把XML改为xlsx的操作仅修改了文件名标识,没有转换文件本质格式。xlsx是基于ZIP压缩的结构化格式,而你生成的file.xlsx本质还是纯XML文本,因此pandas调用openpyxl读取时会抛出BadZipFile错误。你手动用Excel打开再保存时,Excel会自动将兼容的XML表格格式转换为标准xlsx格式,因此可以被pandas正常读取。

可行解决方案
  • 方案1:直接解析XML生成DataFrame(无需转Excel,效率最高)
    Pandas 1.3.0及以上版本内置read_xml函数,对Excel可直接打开的SpreadsheetML格式XML兼容性很好,可直接读取:
import pandas as pd
# 基础用法,大多数场景可直接生效
df = pd.read_xml("file.xml")
# 若默认读取不到对应表格,可调整xpath参数指定数据节点路径,例:
# df = pd.read_xml("file.xml", xpath=".//row")

如果read_xml无法适配你的XML结构,可借助xmltodict库先将XML转为字典结构,再加工为DataFrame,首先安装依赖:pip install xmltodict,参考代码:

import xmltodict
import pandas as pd

with open("file.xml", "r", encoding="utf-8") as f:
    xml_dict = xmltodict.parse(f.read())
# 按XML实际层级提取表格数据,示例为根节点下的row节点集合
table_data = xml_dict["根节点名"]["row节点名"]
df = pd.DataFrame(table_data)
  • 方案2:自动完成Excel格式转换(无需手动打开保存)
    Windows环境可调用win32com模拟Excel操作完成转换,首先安装依赖:pip install pywin32,参考代码:
import win32com.client as win32
import pandas as pd

# 路径需使用绝对路径
xml_path = r"C:\xxx\file.xml"
xlsx_path = r"C:\xxx\file.xlsx"

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(xml_path)
wb.SaveAs(xlsx_path, FileFormat=51)
wb.Close()
excel.Quit()

df = pd.read_excel(xlsx_path, engine="openpyxl")

跨平台环境可调用LibreOffice命令行完成转换,参考代码:

import subprocess
import pandas as pd

subprocess.run(["libreoffice", "--headless", "--convert-to", "xlsx", "file.xml"])
df = pd.read_excel("file.xlsx", engine="openpyxl")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:09:00