Pythonpandas不能读取一些奇怪的编码和拆分窗格旧的Excel文件

我正在尝试将一个旧的Excel文件导入pandas。 该文件是由cropSyst软件使用旧格式(我不知道)生成的,它默认情况下有分割窗格。 这是一个快照

excel预览

一个解决scheme可以是用excel打开文件并将其保存在xlsx中:这样pandas可以毫无问题地读取它,但是我必须处理大量的文件(> 40000),所以这是不可行的。

当试图用pandasimport它

pd.read_excel(filename) 

我得到这个错误

 error: unpack requires a string argument of length 3 *** No CODEPAGE record, no encoding_override: will use 'ascii' 

我也试着把它导入为csv

 pd.read_csv(filename) 

但它只读取一些数据,我尝试使用行分隔符和单元格分隔符的不同组合,没有运气。

从csv分析器读取数据

你有什么build议吗?

编辑

正如@jmcnamara在评论中所build议的,我尝试用Python中所有可用的编码来覆盖文件的编码,但仍然没有运气:它不能正确parsing文件。

这里可以下载一个xls文件

https://drive.google.com/file/d/0B5smcFuBd6EtdFE5eEktZXZVTkU/view?usp=sharing

该文件的格式是Excel 2(BIFF2)。

但是,由于它不是由Excel创build的,它似乎与Excel BIFF2规范不一致。

对于显示WINDOW2logging不正确的文件。 您可以通过获取当前版本的xlrd (0.9.3)并应用以下修补程序来解决此问题:

 diff --git a/xlrd/sheet.py b/xlrd/sheet.py index 36438a0..6d895c4 100644 --- a/xlrd/sheet.py +++ b/xlrd/sheet.py @@ -1455,7 +1455,8 @@ class Sheet(BaseObject): (self.first_visible_rowx, self.first_visible_colx, self.automatic_grid_line_colour, ) = unpack("<HHB", data[5:10]) - self.gridline_colour_rgb = unpack("<BBB", data[10:13]) + if data_len > 10: + self.gridline_colour_rgb = unpack("<BBB", data[10:13]) self.gridline_colour_index = nearest_colour_index( self.book.colour_map, self.gridline_colour_rgb, debug=0) self.cached_page_break_preview_mag_factor = 0 # default (60%) 

然后安装此版本的模块,或者从PYTHONPATH使用它,因为pandas使用xlrd来读取Excel文件。

这仍然给Codepage警告,但这只是一个警告,你可以使用encoding_override='ascii' (或任何正确的编码,但ascii可能是正确的)。

请注意,文件格式中可能还有其他问题,因为您有40,000个文件,但这是我在您提供的文件中find的唯一文件。

更新 :基于第二个示例文件,它看起来像编码是Windows CP-1252,所以以下应该工作:

 import xlrd workbook = xlrd.open_workbook('harvest.xls', encoding_override='cp1252') 

我以前用这个成功来打开旧的Excel文件,试试看:

http://www.python-excel.org/