2016-03-13 297 views
0

我在Ubuntu上使用Python 2.7.11。Python:'NoneType'对象没有属性'decompressobj'

我试图用xlrd包在Python中打开一个Excel文件(.xlsx)。不过,我得到以下错误,当我尝试使用open_workbook()功能从包装打开我的Excel文件:

Traceback (most recent call last): 

    File "TileInserter.py", line 15, in <module> 
     book = open_workbook(sheetPath, on_demand=True) 

    File "/usr/local/lib/python2.7/site-packages/xlrd/__init__.py", line 422, in open_workbook 
     ragged_rows=ragged_rows, 

    File "/usr/local/lib/python2.7/site-packages/xlrd/xlsx.py", line 761, in open_workbook_2007_xml 
     zflo = zf.open(component_names['xl/_rels/workbook.xml.rels']) 

    File "/usr/local/lib/python2.7/zipfile.py", line 1010, in open 
     close_fileobj=should_close) 

    File "/usr/local/lib/python2.7/zipfile.py", line 526, in __init__ 
     self._decompressor = zlib.decompressobj(-15) 

AttributeError: 'NoneType' object has no attribute 'decompressobj' 

我试图谷歌这个错误的原因,并发现,如果zlib库这可能发生未安装。但是当我使用PHP的phpinfo()函数检查时,它显示安装了zlib。这也是最新版本(版本1.2.8)。

所以我现在有点卡住了。有谁知道如何解决这个问题?

编辑:我在TileInserter.py实际的代码是这样(TileInserter.pyTileList.xlsx在同一目录为):

from xlrd import open_workbook 

sheetPath = "TileList.xlsx" 
#some more variables 

#Open Excel file 
book = open_workbook(sheetPath, on_demand=True) 
for name in book.sheet_names(): 
    if name.endswith('1'): 
     sheet = book.sheet_by_name(name) 
+0

请发表您的实际代码 –

回答

1

我在http://www.python-excel.org/看到,有被推荐用于工作库openpyxl .xlsx文件。这可能是你需要的,而不是xlrd

+0

嗯,我试图打开一个'.xls'文件而不是'.xlsx',它确实没有任何问题地打开。所以谢谢指出! 但是根据这个线程[这里](http://stackoverflow.com/questions/4371163/reading-xlsx-files-using-python),'.xlsx'支持在6年前添加到'xlrd'中,而我现在正在使用最新版本(截至目前的0.9.4版本)。 – masquerade817

+0

非常感谢您指出了这一点。我已经解决了我的问题,但是我会等待答案,实际回答问题以提供复选标记。 – masquerade817