我有一个csv文件被读入python,然后将读取器保存为一个数组(我猜)。在
然后,我将csv文件结果与一些Oracle db结果进行比较:
readerSetSAP = []
readerSAP = csv.reader(StringIO.StringIO(request.POST['sap'].value),dialect=csv.excel)
readerSetSAP.extend(readerSAP)
empsTbl = meta.Session.query(model.Person).all();
然后使用嵌套循环进行比较:
^{pr2}$问题是,我经常有这样的警告:
eWarning: Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
所以我的问题是:
在Python中比较这种类型的字符串最可靠的方法是什么?
这里的问题不是比较字符串的“健壮方法”。在Python中比较strigns的一种健壮方法是等式运算符
==
- 您的问题是,您的数据在某个地方被转换成Unicode,而您并没有意识到这一点。在您和其他编写代码的人都应该意识到文本不是ASCII,而不是在1990年后的世界。即使您所有的应用程序都只限于英语,并且不应该在国际环境中运行,您也一定会在人名中或“resumé”之类的单词中找到一些非ASCII字符。在
下面是一个Python控制台示例,说明问题可能发生的时间:
Python的CSV模块不进行authomatic转换,使用字节strigns(也就是说,strigns aready被转换成某种编码),这意味着从数据库中获取的结果是Unicode格式的。可能您的连接使用了一些默认值。在
要解决这个问题,假设数据库中的数据格式正确(并且在插入过程中没有丢失字符信息),就要使用显式编码对从CSV文件读取的字符串进行解码,这样两者都是unicode(Python的内部编码无关)字符串格式-
^{pr2}$因此,在比较之前,您确实要对从CSV文件读取的字符串使用“decode”方法来进行proepr转换。如果你在Windows上,在其他主流(应用)操作系统中,使用“cp1251”进行解码。它应该是“utf-8”。在
我建议阅读这篇文章-它相当有用: http://www.joelonsoftware.com/articles/Unicode.html
相关问题 更多 >
编程相关推荐