将unicode二进制数据作为XLRD的open_workbook方法的参数传递

时间:2015-04-14 09:57:51

标签: python xlrd

我想将unicode二进制数据作为参数(file_contents)传递给XLRD的open_workbook。数据文件类型为.xls

来自article的文档。

open_workbook(filename=None, logfile=sys.stdout, verbosity=0, pickleable=True, use_mmap=USE_MMAP, file_contents=None, encoding_override=None, formatting_info=False, ) 

file_contents
... as a string or an mmap.mmap object or some other behave-alike object. If file_contents is supplied, filename will not be used, except (possibly) in messages.

这是source code

我试过这样做:

input = StringIO.StringIO()
input.write(vals['data'])

book = xlrd.open_workbook(file_contents=input.getvalue())

但是有一个错误:

raise XLRDError('Unsupported format, or corrupt file: ' + msg)
XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '0M8R4KGx'

我该怎么办?

1 个答案:

答案 0 :(得分:3)

我注意到您的数据以字符串0M8R4KGx开头。我进一步注意到base64.decodestring('0M8R4KGx')产生\xd0\xcf\x11\xe0\xa1\xb1,这是XLS文件的前几个字节。

vals['data']中的字符串是base64编码的字符串。您必须先将其解码,然后再将其写入文件,如下所示:

input.write(base64.decodestring(vals['data']))

input.write(vals['data'].decode('base64'))

参考: