使用Python从字符串中删除度数符号

时间:2019-02-28 23:56:16

标签: python string python-2.7 unicode character-encoding

我正在使用Python逐行读取数据的文本文件。其中一行包含度数符号。我想更改字符串的这一部分。我的脚本使用line = line.replace("TEMP [°C]", "TempC")。我的代码在此行停止,但完全不会改变字符串,也不会引发错误。显然,我的替换操作有些问题,因此脚本看不到字符串中存在'TEMP [°C]'。

为了在我的脚本中插入度数,我必须在我的IDE文件设置中将编码更改为UTF-8。我在脚本顶部添加了以下文本。

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

如何将“ TEMP [°C]”替换为“ TempC”?

我正在将Windows 7和Python 2.7与Komodo IDE 5.2一起使用

我尝试在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)

尽管这些建议在阅读我的文本文件时都无效。

3 个答案:

答案 0 :(得分:6)

根据您的症状,您的Python str文字最终会以其utf-8编码形式出现,因此,当您键入以下内容时:

"TEMP [°C]"

您实际上得到了:

'TEMP [\xc2\xb0C]'

您的文件是其他某种编码方式(例如latin-1cp1252),由于您是通过普通的open来读取文件的,因此您将返回未解码的str 。但是在latin-1cp1252编码中,str'TEMP [\xb0C]'(请注意缺少\xc2),因此str比较不会考虑相当于两个字符串。

最好的解决方案是将open替换为io.open,后者使用open的Python 3版本,该版本可以使用给定的编码无缝解码以产生规范的{{1 }}表示形式,并且类似地,在Python未知编码中使用unicode文字而不是unicode,因此在表示度数符号的正确方法上并没有分歧(在{{1}中},只有一种表示形式:

str

正如您在编辑中所描述的,您的文件很可能是unicode(您的编辑器说它是ANSI,which is just a dumb way to describe cp1252),因此选择了import io with io.open('myfile.txt', encoding='cp1252') as f: for line in f: line = line.replace(u"TEMP [°C]", u"TempC")

注意:如果要在整个程序中始终使用cp1252(如果处理非ASCII数据,这是一个不错的主意),则可以将其设为默认值:

encoding

真的,您应该转到Python 3,通过完全拆分两种类型,解决了整个“ unicodefrom __future__ import unicode_literals # All string literals are unicode literals unless prefixed with b, as on Python 2 from io import open # open is now Python 3's open # No need to qualify with `io.` for `open`, nor put `u` in front of Unicode text with open('myfile.txt', encoding='cp1252') as f: for line in f: line = line.replace("TEMP [°C]", "TempC") 一起工作并经常失败”的问题。

答案 1 :(得分:2)

您应将u标志用于unicode字符串文字:

line = line.replace(u"TEMP [°C]", "TempC")

答案 2 :(得分:1)

这段代码对我来说很好用(Python 2.7.14)。 也许您可以指出您是否做了其他事情,所以我们可以从那里开始。

# -*- coding: utf-8 -*-

line = "hello TEMP [°C]"
line = line.replace("TEMP [°C]", "TempC")

print(line)
# hello TempC

注意: 对我来说,不需要u标志。