与旧的xls文件的python xlrd错误

我有一个excel文件,是由一些相当老的软件创build的。 此文件无法在OpenOffice中打开(某些编码错误),并且在Excel 2010中首先只能在受保护的视图中打开。 当我尝试通过xlrd打开它时:

from xlrd import open_workbook rb = open_workbook('405_mut_1x.xls', encoding_override="utf-8") 

我得到一个错误:

 Traceback (most recent call last): File "/home/wintr/PycharmProjects/4lab_1/main.py", line 2, in <module> rb = open_workbook('405_mut_1x.xls', encoding_override="utf-8") File "/usr/lib/python3/dist-packages/xlrd/__init__.py", line 435, in open_workbook ragged_rows=ragged_rows, File "/usr/lib/python3/dist-packages/xlrd/book.py", line 107, in open_workbook_xls bk.fake_globals_get_sheet() File "/usr/lib/python3/dist-packages/xlrd/book.py", line 714, in fake_globals_get_sheet self.get_sheets() File "/usr/lib/python3/dist-packages/xlrd/book.py", line 705, in get_sheets self.get_sheet(sheetno) File "/usr/lib/python3/dist-packages/xlrd/book.py", line 696, in get_sheet sh.read(self) File "/usr/lib/python3/dist-packages/xlrd/sheet.py", line 1467, in read self.update_cooked_mag_factors() File "/usr/lib/python3/dist-packages/xlrd/sheet.py", line 1535, in update_cooked_mag_factors elif not (10 <= zoom <= 400): TypeError: unorderable types: int() <= NoneType() 

与cp1252,utf-7编码相同的东西。 utf_16_le,这是类似的主题返回的build议

 ERROR *** codepage None -> encoding 'utf_16_le' -> UnicodeDecodeError: 'utf16' codec can't decode byte 0x6c in position 4: truncated data 

没有编码,我得到了追溯中的附加string

 *** No CODEPAGE record, no encoding_override: will use 'ascii' 

在Excel 2010(xlsx)格式中保存文件后,此问题消失了 – 文件可以在xlrd和OO中打开。 有没有办法通过xlrd打开这样的文件,而不重新保存? UPD。 python2.7 xlrd没有这个问题。 但是我仍然不知道python3.3 xlrd有什么问题。

问题是在python2和python3之间的不同行为:

 $ python2 Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 1 <= None False $ python3 Python 3.4.3 (default, Jul 28 2015, 18:20:59) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 1 <= None Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: int() <= NoneType() 

要解决这个问题,你可以在1543行左右编辑xlrd / sheet.py:

更改

 elif not (10 <= zoom <= 400): 

 elif zoom is None or not (10 <= zoom <= 400): 

所以行为就像python2一样