繁体   English   中英

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

[英]Remove a degree symbol from a string using Python

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

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

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

如何用'TempC'替换'TEMP [°C]'?

我正在使用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)

这些建议在阅读我的文本文件时都不起作用。

根据您的症状,您的Python str文字最终将作为其utf-8编码,因此当您键入时:

"TEMP [°C]"

你真的得到:

'TEMP [\xc2\xb0C]'

你的文件是一些其他的编码(例如latin-1cp1252 ),并且因为你是通过普通open来阅读它,所以你得到了未解码的str 但是在latin-1cp1252编码中, str'TEMP [\\xb0C]' (注意缺少\\xc2 ),所以str比较不考虑两个字符串等价。

最好的解决方法是更换您的使用openio.open ,它使用了Python 3.0版本的open ,可以无缝使用解码给定的编码,产生典型unicode表示,同样,使用unicode ,而不是文字str中(以Python)未知编码,因此对表示度数符号的正确方法没有异议(在unicode ,只有一个,只有一个表示):

import io

with io.open('myfile.txt', encoding='cp1252') as f:
    for line in f:
        line = line.replace(u"TEMP [°C]", u"TempC")

正如您在编辑中描述的那样,您的文件可能是cp1252 (您的编辑器说它是ANSI, 这只是描述cp1252一种愚蠢方式 ),因此选择了encoding

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

from __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")

真的,你应该转移到Python 3,其中整个“ unicodestr尝试一起工作并经常失败”的事情通过完全拆分这两种类型来解决。

您应该使用u标志作为unicode字符串文字:

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

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

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

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

print(line)
# hello TempC

注意:对我来说,不需要你的旗帜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM