Python中的Unicode等于比较失败的终端,但下Spyder的编辑工作(Python unic

2019-10-20 06:06发布

我需要比较Unicode字符串从在Python脚本定义一个常数的UTF-8的文件来。

我在Linux上使用的Python 2.7.6。

如果我运行中的Spyder(一个Python编辑)上面的脚本我得到了它的工作,但如果我从终端调用Python脚本,我得到了测试失败。 我是否需要导入/调用脚本之前定义在终端的东西吗?

脚本( “pythonscript.py”):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv

some_french_deps = []
idata_raw = csv.DictReader(open("utf8_encoded_data.csv", 'rb'), delimiter=";")
for rec in idata_raw:
    depname = unicode(rec['DEP'],'utf-8')
    some_french_deps.append(depname)

test1 = "Tarn"
test2 = "Rhône-Alpes"
if test1==some_french_deps[0]:
  print "Tarn test passed"
else:
  print "Tarn test failed"
if test2==some_french_deps[2]:
  print "Rhône-Alpes test passed"
else:
  print "Rhône-Alpes test failed"

utf8_encoded_data.csv:

DEP
Tarn
Lozère
Rhône-Alpes
Aude

从运行Spyder的编辑器输出:

Tarn test passed
Rhône-Alpes test passed

运行从终端输出:

$ ./pythonscript.py 
Tarn test passed
./pythonscript.py:20: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if test2==some_french_deps[2]:
Rhône-Alpes test failed

Answer 1:

您比较的字节字符串(类型str )与unicode值。 Spyder的已改变的默认编码从ASCII到UTF-8,和Python做字节串之间的隐式转换unicode比较两个类型时的值。 你的字节串编码成UTF-8,这样的Spyder根据该比较成功。

解决的办法是使用字节串,使用unicode文字为你的两个测试值而不是:

test1 = u"Tarn"
test2 = u"Rhône-Alpes"

更改系统默认的编码方式是,在我看来,一个可怕的想法。 您的代码应正确使用Unicode而不是依赖于隐式转换,而是要改变隐式转换规则只会增加混乱,没有做出任何任务更容易。



Answer 2:

刚开始使用depname = rec['DEP']应该工作,你已经宣布的编码。

如果您print some_french_deps[2]将打印Rhône-Alpes让你比较会工作。



Answer 3:

当你与一个Unicode对象比较字符串对象,蟒蛇抛出此警告。

为了解决这个问题,你可以写

test1 = "Tarn"
test2 = "Rhône-Alpes"

test1 = u"Tarn"
test2 = u"Rhône-Alpes"

其中“U”表示它是一个unicode对象。



文章来源: Python unicode equal comparison failed in terminal but working under Spyder editor