![](/img/trans.png)
[英]Can I read a .xls Excel file's title using the xlrd python module?
[英]How do I read an Excel file into Python using xlrd? Can it read newer Office formats?
我的問題如下,但對任何有xlrd經驗的人都會感興趣。
我剛剛發現xlrd,它看起來像是完美的解決方案,但我開始時遇到了一些問題。 我試圖從道瓊斯提取的Excel文件中以編程方式提取數據,其中包含道瓊斯工業平均指數的當前組成部分(鏈接: http : //www.djindexes.com/mdsidx/?event = showAverages )
當我打開未修改的文件時,我得到一個令人討厭的BIFF錯誤(無法識別二進制格式)
但是,您可以在此屏幕截圖中看到Excel 2008 for Mac認為它采用'Excel 1997-2004'格式(屏幕截圖: http : //skitch.com/alok/ssa3/componentreport-dji.xls-properties )
如果我手動在Excel中打開並顯式保存為“Excel 1997-2004”格式,則在python usig xlrd中打開,一切都很棒。 請記住,Office認為該文件已經采用“Excel 1997-2004”格式。 所有文件都是.xls
這是一個復制問題的ipython會話的pastebin: http ://pastie.textmate.org/private/jbawdtrvlrruh88mzueqdq
有任何想法:如何欺騙xlrd識別文件,以便我可以提取數據? 如何使用python將顯式的“另存為”格式自動化為xlrd將接受的格式? B計划?
FWIW,我是xlrd的作者,也是xlwt的維護者(pyExcelerator的一個分支)。 幾點:
ComponentReport-DJI.xls文件名稱錯誤; 它不是XLS文件,它是一個制表符分隔值文件。 用文本編輯器(例如記事本)打開它,你就會明白我的意思。 您還可以使用Python查看非常原始的原始字節:
>>> open('ComponentReport-DJI.xls', 'rb').read(200) 'COMPANY NAME\\tPRIMARY EXCHANGE\\tTICKER\\tSTYLE\\tICB SUBSECTOR\\tMARKET CAP RANGE\\ tWEIGHT PCT\\tUSD CLOSE\\t\\r\\n3M Co.\\tNew York SE\\tMMM\\tN/A\\tDiversified Industria ls\\tBroad\\t5.15676229508\\t50.33\\t\\r\\nAlcoa Inc.\\tNew York SE\\tA'
您可以使用Python的csv模塊讀取此文件...只需在調用csv.reader()
使用delimiter="\\t"
。
xlrd可以讀取pyExcelerator可以讀取的任何文件,並且可以更好地讀取它們 - 日期不會以浮點數形式出現,Excel日期的完整故事在xlrd文檔中。
pyExcelerator是abandonware-xlrd,xlwt還活着。 查看http://groups.google.com/group/python-excel
HTH約翰
對Office 2007/2008(OpenXML)格式的xlrd支持是alpha測試 - 請參閱python-excel新聞組中的以下帖子: http ://groups.google.com/group/python-excel/msg/0c5f15ad122bf24b?hl = en
有關pyExcelerator的更多信息:要讀取文件,請執行以下操作:
import pyExcelerator
book = pyExcelerator.parse_xls(filename)
其中filename是一個字符串,是要讀取的文件名(不是類似文件的對象)。 這將為您提供表示工作簿的數據結構:對列表,其中對的第一個元素是工作表名稱,第二個元素是工作表數據。
工作表數據是一個字典,其中鍵是(row,col)對(從0開始),值是單元格內容 - 通常是int,float或string。 因此,例如,在第一個工作表上的所有數據的簡單情況下:
data = book[0][1]
print 'Cell A1 of worksheet %s is: %s' % (book[0][0], repr(data[(0, 0)]))
如果單元格為空,則會出現KeyError。 如果你正在處理日期,他們可能 (我忘記)以整數或浮點數來表達; 如果是這種情況,您需要轉換。 基本上規則是:datetime.datetime(1899,12,31)+ datetime.timedelta(days = n),但可能會偏離1或2(因為Excel將1900視為與Lotus兼容的閏年,因為我不記得1900-1-1是0還是1),所以要做一些反復試驗。 我認為日期時間存儲為花車(天數和一天中的幾分之一)。
我認為對論壇有部分支持,但我不保證任何事情。
這里有一些我做的代碼:(向下看): 這里
不確定更新的格式 - 如果xlrd無法讀取它,xlrd需要發布新版本!
你必須使用xlrd嗎? 我剛從該網站下載了“更新 - 道瓊斯工業平均推動者 - 2008”,並且使用pyExcelerator閱讀它並沒有任何問題。
import pyExcelerator
book = pyExcelerator.parse_xls('DJIAMovers.xls')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.