[英]Python: Unsupported format, or corrupt file
I am trying to make a python program that downloads and XLS file from a website, in this case website is: https://www.blackrock.com/uk/individual/products/291392/ , and loads it as a dataframe in pandas ,具有正确的数据结构。
问题是当我尝试通过 pandas 加载它时,它给了我一个错误:XLRDError:不支持的格式,或损坏的文件:预期的 BOF 记录; 找到 b'\xef\xbb\xbf\xef\xbb\xbf<?'
我不太确定是什么导致了这个错误,但可能是文件中的某些东西。 我可以在 Excel 中打开文件,即使我收到文件和文件扩展名不匹配的警告,并且文件可能很危险等。如果我单击“是”以打开它,它会打开并正确显示数据. 如果我使用 Excel 将文件另存为.xlsx,我可以在 pandas 中打开它,但我宁愿使用不需要手动打开 Excel 并保存文件的解决方案。
我尝试将文件扩展名重命名为 xlsx,但这不起作用,因为它不允许我打开具有该扩展名的文件。 我尝试了许多不同的扩展,但没有一个会咬人——不幸的是。
我很茫然。
我希望,你能帮忙。
编辑:我使用的代码是:
download_path = 'https://www.blackrock.com/uk/individual/products/291392/fund/1527484370694.ajax?fileType=xls&fileName=iShares-MSCI-World-SRI-UCITS-ETF-USD-Dist_fund&dataType=fund'
testing = pd.read_excel(download_path, engine='xlrd', sheet_name = 'Holdings', skiprows = 3)
实际问题是文件格式是SpreadSheetML,它仅在2003 年至2006 年之间短暂使用过。它已被XLSX 格式取代。 因为,它已经存在了很短的时间,而且不久前,大多数包不支持加载/保存操作。 有关格式的更多信息,请参见: https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa140066(v=office.10)?redirectedfrom=MSDN
由于这个原因,Pandas 或任何其他 XML 解析器(例如 Etree)将无法正确加载。 常规的 MS Office 软件仍然可以正确加载它。 据我所知,您可以使用aspose-cells
package: https://products.aspose.com/cells/python-java/处理 SpreadSheetML 文件
对于您的情况:
# Import packages
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook, FileFormatType
from asposecells.api import HtmlSaveOptions
# Read Workbook
workbook = Workbook('iShares-MSCI-World-SRI-UCITS-ETF-USD-Dist_fund.xls')
worksheet = workbook.getWorksheets().get(0)
# Accessing a cell using its name
cells = worksheet.getCells()
cell = cells.get("A1")
# Print Message
print("Cell Value: " + str(cell.getValue())) # Prints Cell Value: 17-Nov-2021
# To save SpreadSheetML in different format (HTML)
saveOptions = HtmlSaveOptions()
saveOptions.setDisableDownlevelRevealedComments(True)
workbook.save("iShares-MSCI-World-SRI-UCITS-ETF-USD-Dist_fund.html", saveOptions)
正如 Slybot 所提到的,这不是一个真正的 xls 文件。
如果您在纯文本编辑器或十六进制编辑器中检查内容,header 将启动:
<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
确认这是 xml 文档,而不是 Office 2007 压缩 xlsx 办公文档。
您的下一步取决于您是否在将运行此代码的机器上安装了 Excel,如果没有,您有权访问并愿意支付的其他库 - 例如,Slybot 提到aspose
。
如果您在安装了 Excel 的 Windows 机器上运行此程序,则您可以免费且有能力选择自动打开 Excel 并保存为 xlsx 的操作。 这是通过使用 Win32com 模块,在这个答案中描述:
Alternatively, save your Excel styled XML as xlsx with Workbook.SaveAs method using
win32com
(only for Windows users) and read in with pandas.read_excel skipping appropriate rows.
您可以阅读原始 XML 并消化它。 相关节点有:
<ss:Workbook>
<ss:Worksheet ss:Name="Holdings">
<ss:Table>
<ss:Row>
<ss:Cell ss:StyleID="Left">
<ss:Data ss:Type="String">iShares MSCI World SRI UCITS ETF</ss:Data>
我不熟悉提供此功能的任何库,因此无法就此选项提供建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.