【发布时间】:2019-07-22 23:33:10
【问题描述】:
我正在使用 Python 逐行读取数据的文本文件。其中一行包含一个度数符号。我想改变这部分字符串。我的脚本使用line = line.replace("TEMP [°C]", "TempC")。我的代码停在这一行,但根本没有改变刺痛,也没有抛出错误。显然,我的替换存在一些问题,因此脚本没有看到我的字符串中存在“TEMP [°C]”。
为了在我的脚本中插入度数符号,我必须在我的 IDE 文件设置中将编码更改为 UTF-8。我在脚本顶部添加了以下文本。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
如何将“TEMP [°C]”替换为“TempC”?
我正在使用带有 Komodo IDE 5.2 的 Windows 7 和 Python 2.7
我已尝试在 Komodo 的 Python Shell 中运行建议的代码,结果更改了文件。
# -*- coding: utf-8 -*-
line = "hello TEMP [°C]"
line = line.replace("TEMP [°C]", "TempC")
print(line)
hello TempC
这个在 Komodo 的 Python Shell 中建议的代码返回了这个。
line = "TEMP [°C]"
line = line.replace(u"TEMP [°C]", "TempC")
Traceback (most recent call last):
File "<console>", line 0, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 6: ordinal not in range(128)
但在阅读我的文本文件时,这些建议都不起作用。
【问题讨论】:
-
您的代码在 Python 2.7 交互模式下对我来说工作得很好。
-
您是使用纯
open打开文件,还是使用io.open正确/自动解码为unicode?您正在读取的文件的编码是什么?如果您使用纯open,从非 UTF-8 文件中读取,您将获得与此处不同的str("TEMP [°C]"实际上是'TEMP [\xc2\xb0C]',但如果您正在读取的文件是latin-1,您会在'TEMP [\xb0C]'中读取(注意缺少\xc2,这是utf-8表示所需的)。 -
@GBG:编辑只是更强烈地表明文件的编码不是 UTF-8。是 Windows 还是类 UNIX?如果是后者,尝试在命令行运行
file NAMEOFYOURINPUTFILE;我猜它会告诉你类似NAMEOFYOURINPUTFILE: ISO-8859 text的内容,而不是 utf-8 文本。 -
@ShadowRanger。我使用下面的链接来确定我正在阅读的文件使用 ANSI 编码。我尝试添加 import io 并使用 io.open 打开文件,但字符串没有改变。stackoverflow.com/questions/3710374/…
标签: python string python-2.7 unicode character-encoding