[英]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.