You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python脚本解析HTML生成DataFrame并写入Excel时出现Bad CRC-32 for file '[Content_Types].xml'错误的问题咨询

解决Python写入Excel后无法打开的BadZipFile错误

我看了你遇到的问题——从HTML解析DataFrame后提取特定行写入Excel,结果文件打不开还报zipfile.BadZipFile错误,这大概率是代码里写入Excel的逻辑出了问题,导致文件没有正确生成。咱们来一步步拆解问题:

你的代码里的几个关键问题:

  • 你创建了pd.ExcelWriter对象writer,但实际写入的时候却直接用了df.to_excel(name),这里不仅变量名错了(应该是df2而不是df),而且跳过了writer的正确使用流程,导致文件写入不完整。
  • 每次循环找到符合条件的行时,你都会重新创建writer并覆盖掉之前的文件,而且没有正确关闭/释放writer资源,这会让Excel文件的结构损坏,变成无法识别的坏文件。
  • 你导入了xlwtWorkbook但完全没用到,这些可以删掉,避免冗余。

修正后的代码:

import pandas as pd

# 读取HTML表格
file = r'...file.html'
tables = pd.read_html(file)
df1 = tables[0]

# 收集所有符合条件的行
filtered_rows = []
for index in df1.index:
    activity = df1.iat[index, 0]
    if activity == "Sample":
        # 注意:df1.loc[[index]] 就是当前行,不需要+1(index是DataFrame的索引,不是Excel行号)
        filtered_rows.append(df1.loc[[index]])

# 如果有符合条件的行,合并后写入Excel
if filtered_rows:
    df2 = pd.concat(filtered_rows)
    name = "Sample.xlsx"
    # 使用ExcelWriter正确写入,推荐用with语句自动管理资源
    with pd.ExcelWriter(name) as writer:
        df2.to_excel(writer, index=False)  # index=False可以避免把DataFrame索引写入Excel

# 测试读取
read_df = pd.read_excel(name)
print(read_df)

关键修改说明:

  1. 收集所有符合条件的行再统一写入:避免循环里重复创建文件导致覆盖和损坏,先把所有匹配的行存到列表里,最后合并成一个DataFrame一次性写入。
  2. 正确使用pd.ExcelWriterwith语句with语句会自动帮你关闭writer,确保文件完整写入,不会因为资源未释放导致文件损坏。
  3. 修正索引的错误:你之前用index + 1是混淆了DataFrame的索引和Excel的行号,直接用df1.loc[[index]]就能拿到当前行的数据。
  4. 删除无用的导入:去掉了没用到的xlwt相关模块,简化代码。

这样修改后,生成的Excel文件应该就能正常打开了,你可以试试这个版本~

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

火山引擎 最新活动