使用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
相关产品推荐
相关产品推荐

