gpt4 book ai didi

Python unicode 相等比较在终端中失败,但在 Spyder 编辑器下工作

转载 作者:行者123 更新时间:2023-12-01 05:11:59 25 4
gpt4 key购买 nike

我需要将来自 utf-8 文件的 unicode 字符串与 Python 脚本中定义的常量进行比较。

我在 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

最佳答案

您正在将字节字符串(str 类型)与 unicode 值进行比较。 Spyder 已将默认编码从 ASCII 更改为 UTF-8,并且 Python 在比较两种类型时在字节字符串和 unicode 值之间进行隐式转换。您的字节字符串被​​编码为 UTF-8,因此在 Spyder 下比较会成功。

解决方案是使用字节字符串,而是使用 unicode 文字作为两个测试值:

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

在我看来,更改系统默认编码是一个糟糕的主意。您的代码应该正确使用 Unicode,而不是依赖隐式转换,但更改隐式转换的规则只会增加困惑,而不是使任务变得更容易。

关于Python unicode 相等比较在终端中失败,但在 Spyder 编辑器下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com