我的问题如下,但对任何有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模块读取此文件...只需delimiter="\t"
在您的调用中使用即可csv.reader()
.
xlrd可以读取pyExcelerator可以读取的任何文件,并且可以更好地读取它们 - 日期不会以浮点数形式出现,Excel日期的完整故事在xlrd文档中.
pyExcelerator是abandonware-xlrd,xlwt还活着.查看http://groups.google.com/group/python-excel
HTH约翰