xlrd读取.xls文件报BOF记录错误的格式转换方案
问题根因
你触发xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'Cycle ID'报错的核心原因是:持有的.xls后缀文件并非标准微软二进制BIFF格式的Excel文件,只是被修改了后缀名的纯文本文件。
xlrd库的解析逻辑仅针对标准二进制.xls文件,这类合法文件的开头必须存在固定的BOF(Begin of File,文件起始)标识,而你通过cat myfile.xls | head查到的文件开头直接是可读文本Cycle ID,和报错里捕获到的开头字节完全匹配,不存在二进制格式标识,自然无法被xlrd识别。
处理方案
不需要做复杂的格式修复,按以下方式处理即可正常读取调用:
- 直接按纯文本模式读取
这类文件本身就是字符串格式存储的,直接用Python内置的文件读取接口加载即可,完全不需要依赖xlrd库,参考代码:
批量处理时遍历目标目录下所有.xls后缀文件,逐个按上述逻辑读取即可。读取后你可以把内容统一另存为.txt后缀的标准文本文件,避免后续被误判为Excel文件触发同类报错。# 单文件读取示例 file_path = "your_file.xls" # 如果utf-8编码读取出错,可替换为gbk、latin-1等编码尝试 with open(file_path, "r", encoding="utf-8") as f: file_content = f.read() # 后续可根据文本内的分隔规则(比如示例中的冒号、多空格分隔)提取需要的字段 - 转存为标准表格格式(按需选择)
如果你后续需要用表格处理逻辑读取文件,可以在读取纯文本内容后,按文本的结构规则提取结构化字段,用Python内置的csv库或openpyxl库将内容写入为标准.csv/.xlsx格式文件,后续pandas等各类数据处理库都可以正常解析读取。
注意:不要尝试强行修改xlrd的解析逻辑适配这类文件,本身文件格式和xlrd支持的格式完全不匹配,这类操作没有实际意义。
内容的提问来源于stack exchange,提问作者Gregori
相关产品推荐
相关产品推荐

