簡體   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