Python:比较字符串的健壮方法

2024-05-14 23:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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中比较这种类型的字符串最可靠的方法是什么?


Tags: 文件csvtodbrequestunicode读取器数组
1条回答
网友
1楼 · 发布于 2024-05-14 23:24:18

这里的问题不是比较字符串的“健壮方法”。在Python中比较strigns的一种健壮方法是等式运算符==- 您的问题是,您的数据在某个地方被转换成Unicode,而您并没有意识到这一点。在

您和其他编写代码的人都应该意识到文本不是ASCII,而不是在1990年后的世界。即使您所有的应用程序都只限于英语,并且不应该在国际环境中运行,您也一定会在人名中或“resumé”之类的单词中找到一些非ASCII字符。在

下面是一个Python控制台示例,说明问题可能发生的时间:

>>> "maçã" == u"maçã"
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False

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

相关问题 更多 >

    热门问题