2012-03-08 217 views
15

我的代碼:python xlrd不支持的格式或損壞的文件。

import xlrd 
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls") 
sh = wb.sheet_by_index(0) 
print sh.cell(0,0).value 

錯誤:

Traceback (most recent call last): 
File "Z:\Wilson\tradedStockStatus.py", line 18, in <module> 
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls") 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 429, in open_workbook 
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS) 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1545, in getbof 
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8]) 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1539, in bof_error 
raise XLRDError('Unsupported format, or corrupt file: ' + msg) 
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; 
found '<table r'" 

的文件似乎並沒有被破壞或者是不同的格式。 任何有助於找到問題根源的東西都會很棒。

+0

1.嘗試更改文件名(在開頭處丟失數字和空格)2.文件密碼是否受到保護? – user850498 2012-03-08 19:49:22

+0

我試着用相同的結果改變文件名,並且文件沒有密碼保護。 – wDroter 2012-03-08 21:27:08

回答

19

你說:

The file doesn't seem to be corrupted or of a different format.

然而,隨着錯誤消息指出,前8個字節的文件是'<table r' ...這絕對不是Excel的.xls格式。用文本編輯器(例如記事本)打開它,它不會注意到(錯誤的).xls擴展名並親自查看。

+0

同樣,如果我得到(我得到)一個類似的錯誤,但與* XLRDError:不支持的格式,或損壞的文件:預期BOF記錄;發現'<?xml ve'*,這意味着我的* xls *確實是* xlsx *? – Pyderman 2015-07-03 17:22:34

+0

@Pyderman不,它不是一個xlsx文件。可以保存爲XML Spreadsheet(* .xml)(不受xlrd支持) – 2017-01-11 00:30:03

0

我剛下載了xlrd,創建了一個用於測試的excel文檔(excel 2007),並得到了相同的錯誤(消息說'找到了PK \ x03 \ x04 \ x14 \ x00 \ x06 \ x00')。擴展名是xlsx。試圖將其保存爲舊的.xls格式並且錯誤消失.....

-1

您的文件沒有任何問題。 xlrd目前還不支持xlsx(excel 2007+)文件,儘管它聲稱已經支持了一段時間。

Simplistix github

2天前,他們犯了一個字母前的版本,他們的混帳於一體的XLSX支持。其他論壇建議您爲xlsx文件使用DOM解析器,因爲xlsx文件類型只是包含XML的zip文件。我沒有試過這個。還有另一個與xlrd具有類似功能的軟件包,這稱爲openpyxl,您可以從easy_install或pip獲取它。我還沒有嘗試過,但是,它的API應該與xlrd類似。

+1

-1(1)他的文件以'

2012-04-15 23:38:29

+0

謝謝你的xlrd和建立對xlsx的支持,John! xlrd是恕我直言,用於處理excel文件的最佳python模塊。如果我可以幫助支持你的工作金錢,否則,請讓我知道... – GE420 2012-11-21 06:42:07

6

我有類似的問題,它與版本有關。在Python終端檢查:

>> import xlrd 
>> xlrd.__VERSION__ 

如果你有「0.9.0」可以打開幾乎所有的文件。如果您有我在Ubuntu上發現的'0.6.0',那麼您可能在使用最新的Excel文件時遇到問題。您可以使用Distutils標準下載最新版本的xlrd。

+1

「可能有問題」是不準確的。 xlrd 0.6.0根本不處理xlsx文件。 0.6.0是不支持的古董。 – 2013-03-16 19:52:47

3

這將發生在一些文件,同時也在Excel中打開。

3

嘗試與熊貓打開它:

import pandas as pd 
data=pd.read_html(filename.xls) 

或者嘗試其他任何HTML解析器的Python。

這不是一個合適的excel文件,但可以用excel讀取html。

+1

嗨我得到這個錯誤:ValueError:找不到表格 – biobirdman 2014-07-22 02:40:52

+1

嗨,用文本編輯器打開你的xls,看看它是否是html。如果你在第一個頂部出現錯誤,它是一個HTML。我不明白爲什麼如果你嘗試使用read_html,你會得到一個「找不到表格」。 – foebu 2014-07-22 15:00:24

0

在我的情況下,用@ john-machin建議的文本編輯器打開文件後,我意識到文件沒有加密,因爲Excel文件應該是這樣的,但它是以CSV格式存儲的,並保存爲Excel文件。我所做的是重命名的文件和它的推廣和使用read_csv函數:

os.rename('sample_file.xls', 'sample_file.csv') 
csv = pd.read_csv("sample_file.csv", error_bad_lines=False) 
0

我遇到了同樣的問題。

它位於.xls文件本身 - 它看起來像一個Excel文件,但它不是。 (看看你打開Excel中的.xls時是否彈出)

sjmachin評論於2013年1月19日從https://github.com/python-excel/xlrd/issues/26幫助。

1

我在下載.xls文件時發現了類似的問題,並使用xlrd庫將其打開。然後我嘗試了轉換的.xls的溶液進入的.xlsx詳見這裏:how to convert xls to xlsx

它就像一個魅力,而不是打開的.xls,我與.xlsx文件的工作現在用openpyxl庫。

希望它有助於解決您的問題。

0

我遇到了這個問題,通過too.I Excel中打開該文件並將其保存爲其他格式,如Excel 97-2003最後我解決了這個問題

0

我有同樣的問題。這些舊文件格式化爲製表符分隔的文件。我已經能夠用read_table打開我的問題文件;即df = pd.read_table('trouble_maker.xls')