在Python中比较unicode和unicode

时间:2013-11-03 10:11:15

标签: python unicode utf-8 python-unicode

我正在尝试计算以UTF-8保存的乌尔都语文档中相同单词的数量。

所以例如我的文档包含3个完全相同的单词,用空格分隔

خُداوند خُداوند خُداوند

我尝试使用以下代码读取文件来计算单词:

        file_obj = codecs.open(path,encoding="utf-8")
        lst = repr(file_obj.readline()).split(" ")
        word = lst[0]
        count =0
        for w in lst:
            if word == w:
                count += 1
        print count

但是我得到的计数值是1,而我应该得到3。

如何比较Unicode字符串?

3 个答案:

答案 0 :(得分:3)

从代码中删除repr()。仅使用repr()创建调试输出;您正在将一个unicode值转换为可以粘贴到解释器中的字符串。

这意味着您的文件行现在存储为:

>>> repr(u'خُداوند خُداوند خُداوند\n').split(" ")
["u'\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f", '\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f', "\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f\\n'"]

注意 double 反斜杠(转义的unicode转义),第一个字符串以u'开头,最后一个字符串以\\n'结尾。这些值显然永远不会相等。

删除repr(),并使用.split() 不带参数来删除尾随空格:

lst = file_obj.readline().split()

您的代码将起作用:

>>> res = u'خُداوند خُداوند خُداوند\n'.split()
>>> res[0] == res[1] == res[2]
True

您可能需要先规范化输入;某些字符可以表示为一个unicode代码点,也可以表示为两个组合代码点。规范化将所有这些字符移动到组合或分解状态。请参阅Normalizing Unicode

答案 1 :(得分:1)

尝试删除repr

lst = file_obj.readline().split(" ")

重点是,您应该至少print个变量lstw才能看到它们是什么。

答案 2 :(得分:0)

比较Python中的unicode字符串:

a = u'Artur'
print(a)
b = u'\u0041rtur'
print(b)

if a == b:
    print('the same')

结果:

Artur
Artur
the same