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

使用xlrd读取xls文件遇BOF记录错误:首行冗余问题求助

解决XLRDError: Unsupported format, or corrupt file: Expected BOF record问题

我之前也碰到过一模一样的坑!这个错误的核心原因是你的xls文件首行不是标准Excel文件要求的BOF(文件起始)记录——从错误提示里的found b'Report g'就能看出来,文件开头是一段普通文本,而非xls格式规定的起始标识,导致对格式校验严格的xlrd识别不了这是合法的xls文件。

既然你手动删除首行就能正常读取,那完全可以在代码里自动处理,不用每次手动修改文件,给你两个简单实用的解决方案:

方案1:用pandas的skiprows参数跳过首行

这是最直接高效的方法,直接告诉pandas读取时跳过第一行:

import os
import pandas as pd
import xlrd

for filename in os.listdir("."):
    if filename.startswith("report_1"):
        # skiprows=1 表示跳过文件的第一行
        df = pd.read_excel(filename, skiprows=1)

如果你的文件开头还有更多非表格内容,只要调整skiprows的数值就行,比如跳过前2行就设成skiprows=2。

方案2:用xlrd手动读取并跳过无效行

如果你需要更灵活地处理(比如不确定开头有多少无效行),可以先用xlrd打开文件,再跳过无效行后转成DataFrame:

import os
import xlrd
import pandas as pd

for filename in os.listdir("."):
    if filename.startswith("report_1"):
        workbook = xlrd.open_workbook(filename)
        sheet = workbook.sheet_by_index(0)
        # 跳过第一行,从第2行开始读取数据
        data_rows = sheet.get_rows()
        next(data_rows)  # 跳过首行
        df = pd.DataFrame(data_rows)
        # 如果需要把第二行设为表头,可取消下面两行注释
        # df.columns = df.iloc[0]
        # df = df[1:]

另外补充一下:你的xlrd版本1.0.0对标准xls文件的支持是没问题的(后来的xlrd2.0+才移除了对xls的支持),所以问题完全出在文件开头的非标准内容上。如果后续碰到类似问题,也可以先检查下文件是不是真的是原生xls格式——比如有些csv文件改了后缀成xls,也会触发这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:40