使用Python Pandas打开旧版XLS文件遇阻,求解决方案
解决方法
问题本质:你下载的文件并非真正的Excel 97-2003(XLS)格式,而是披着.xls后缀的HTML表格文件(从错误信息里的b'\xef\xbb\xbf\xef\xbb\xbf<?'可以看出,这是带重复BOM头的文本格式内容,属于HTML/XML结构)。
正确处理代码
直接使用pandas的read_html方法读取(该方法支持读取HTML表格,不管文件后缀是什么):
读取本地文件
import pandas as pd file_path = "C:/temp/a_file.xls" # 读取文件中的所有HTML表格,返回DataFrame列表 dfs = pd.read_html(file_path) # 遍历输出每个表格 for table_index, df in enumerate(dfs): print(f"第{table_index+1}个表格:") print(df.head()) # 如需保存为Excel,可执行 df.to_excel(f"table_{table_index+1}.xlsx")
直接读取在线链接
如果无需下载到本地,也可以直接读取URL:
import pandas as pd url = "https://www.ishares.com/us/products/239566/ishares-iboxx-investment-grade-corporate-bond-etf/1521942788811.ajax?fileType=xls&fileName=iShares-iBoxx--Investment-Grade-Corporate-Bond-ETF_fund&dataType=fund" dfs = pd.read_html(url) for table_index, df in enumerate(dfs): print(f"第{table_index+1}个表格:") print(df.head())
为什么之前的方法失败
xlrd引擎仅支持老式二进制XLS格式,该文件是文本HTML,缺少XLS文件必需的BOF(文件起始)标记,因此报错。openpyxl引擎用于处理XLSX格式(基于ZIP压缩的XML结构),该文件不是ZIP包,所以触发BadZipFile错误。
内容的提问来源于stack exchange,提问作者xymzh
相关产品推荐
相关产品推荐

