使用xlrd读取包含中文和/或印地语字符的Excel xls文件
在上面的链接中,我使用了这个工具来读取一个XLS文件。如果这个XLS文件里面有中文或印地语等不同语言的字符,它就不能正确输出这些字符。有没有什么解决办法呢?
我在网上搜索后,找到了这个:
import xlrd
def upload_xls(dir,file,request):
try:
global msg
global row_num
row_num = []
header_arr = []
global file_path
file_path = dir
#reader = csv.reader(open(file), delimiter='#', quotechar='"')
book = xlrd.open_workbook('dodgy.xls',encoding='cp1252') ##To specify UTF8-encoding
wb.sheet_names()
sh = wb.sheet_by_index(0)
valid_xl_format = 0
invalid_xl_format = 0
except:
print "Error
但是在这一行 book = open_workbook('dodgy.xls',encoding='cp1252')
出现了一个错误:
TypeError: open_workbook() got an unexpected keyword argument 'encoding'
4 个回答
在Python的标准库里,有一个叫做csv的模块,它可以处理Unicode字符,这在Python 3.1版本中是可以的。
注意:在Python 2.x版本中,csv库是不支持Unicode的。
[dis]claimer: 我是xlrd的作者。
如果xls文件里包含不同语言的字符,比如中文或印地语,它输出的内容可能不准确。有没有什么解决办法呢?
文档中提到的encoding_override参数只适用于旧文件,也就是1997年之前的Excel版本生成的文件。只有在内部记录的“代码页”缺失或不正确时才会用到这个参数。
注意:如果旧文件里有中文字符,使用'cp1252'会导致错误。
注意:如果旧文件里有印地语(德瓦那加里文)字符,这种情况很少见……据我所知,ISCII脚本从来没有官方支持的代码页,我也没听说过有什么非官方的。如果你有这方面的信息或者样本文件,欢迎分享。
Excel 97及以后的版本会把所有文本数据记录为(实际上是)UTF-16LE。如果文件是有效的Excel 97或更高版本的文件,encoding_override参数会被忽略。
无论是哪个版本的Excel生成了这个文件,xlrd都会返回unicode字符串。你遇到的问题更可能是因为你在显示或转换这些unicode字符串时出了问题。
如果需要进一步的帮助,请编辑你的问题,展示实际输出的例子以及“确切的内容”。
根据xlrd模块的说明,正确的参数应该是:encoding_override="cp1252"
,而不是encoding="cp1252"
。
从你导入xlrd模块的方式来看,你应该使用xlrd.open_workbook
来调用这个函数,但在示例代码中你直接使用了这个函数,就好像你用了from xlrd import *
一样。