如何使用xlrd将Excel文件读入Python?它可以读取更新的Office格式吗?

11 python xlrd import-from-excel

我的问题如下,但对任何有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计划?

Joh*_*hin 26

FWIW,我是xlrd的作者,也是xlwt的维护者(pyExcelerator的一个分支).几点:

  1. 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'
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用Python的csv模块读取此文件...只需delimiter="\t"在您的调用中使用即可csv.reader().

  2. xlrd可以读取pyExcelerator可以读取的任何文件,并且可以更好地读取它们 - 日期不会以浮点数形式出现,Excel日期的完整故事在xlrd文档中.

  3. pyExcelerator是abandonware-xlrd,xlwt还活着.查看http://groups.google.com/group/python-excel

HTH约翰


Mic*_*ale 0

这是我所做的一些代码:(向下看底部):这里

不确定较新的格式 - 如果 xlrd 无法读取它,则 xlrd 需要发布新版本!