我正在嘗試制作一個從網站下載和 XLS 檔案的 python 程式,在這種情況下,網站是:https://www.blackrock.com/uk/individual/products/291392/,并將其作為資料框加載到熊貓中, 具有正確的資料結構。
問題是當我嘗試通過 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)
uj5u.com熱心網友回復:
實際問題是檔案格式是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包處理 SpreadSheetML 檔案:https : //products.aspose.com/cells/python-java/
對于您的情況:
# 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)
uj5u.com熱心網友回復:
正如 Slybot 所提到的,這不是一個真正的 xls 檔案。
如果您在純文本編輯器或十六進制編輯器中檢查內容,標題開始:
<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
這證實這是一個 xml 檔案,而不是 Office 2007 壓縮的 xlsx 辦公檔案。
您接下來的步驟取決于您是否在將運行此代碼的機器上安裝了 Excel,如果沒有,您可以訪問哪些其他庫并愿意支付費用 -aspose例如Slybot 提到的。
最簡單的解決方案——Excel
如果您在安裝了 Excel 的 Windows 計算機上運行此程式,您可以免費且功能強大地自動打開 Excel 并另存為 xlsx 的操作。這是通過使用 Win32com 模塊,在此答案中描述:
嘗試使用 Python 決議 XLS (XML) 檔案
或者,使用Workbook.SaveAs方法將 Excel 樣式的 XML 保存為 xlsx
win32com(僅適用于 Windows 用戶)并使用pandas.read_excel讀入,跳過適當的行。
XML 解決方案
您可以讀取原始 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>
第三方庫解決方案
我不熟悉提供此功能的任何庫,因此無法就此選項提供建議。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361650.html
