我從格式爲10.990,00的站點提取價格,這樣做沒有意義。需要什麼使它成爲10,990.00。我試過以下,但它取代了所有。如何交換字符串中的逗號和點號
price = "10.990,00"
price = price.replace(',','.',1)
price = price.replace('.',',',1)
我在做什麼錯?
我從格式爲10.990,00的站點提取價格,這樣做沒有意義。需要什麼使它成爲10,990.00。我試過以下,但它取代了所有。如何交換字符串中的逗號和點號
price = "10.990,00"
price = price.replace(',','.',1)
price = price.replace('.',',',1)
我在做什麼錯?
用第一個逗號替換第一個逗號後,用逗號代替第一個點。插入的第一個點str.replace()
不能被第二個str.replace()
調用取代。
try:
from string import maketrans # Python 2
except ImportError:
maketrans = str.maketrans # Python 3
price = price.translate(maketrans(',.', '.,'))
在其穿過字符串,不會使雙置換,是非常快啓動這會爲交換點,反之亦然逗號。
我使代碼與Python 2和3兼容,其中string.maketrans()
被替換爲static str.maketrans()
function。
這裏的例外是Python 2 unicode
;它與Python 3中的str.translate()
一樣工作,但沒有maketrans
工廠爲您創建映射。您可以使用字典是:
unicode_price = unicode_price.translate({u'.': u',', u',': u'.'})
演示:
>>> try:
... from string import maketrans # Python 2
... except ImportError:
... maketrans = str.maketrans # Python 3
...
>>> price = "10.990,00"
>>> price.translate(maketrans(',.', '.,'))
'10,990.00'
這很有趣我在Py27上,它說'maketrans'的Uresolved Reference'' – Volatil3 2015-03-13 15:29:42
@ Volatil3:聽起來像你的IDE告訴你那樣;是PyCharm嗎?你可以使用第一行而不用'try..except',PyCharm不會再抱怨,或者你可以忽略這個警告; IDE會看到'maketrans = str.maketrans'行,但不知道它永遠不會在Python 2上執行。 – 2015-03-13 15:30:36
是的,它是PyCharm :-)讓我跑然後 – Volatil3 2015-03-13 15:31:15
您的代碼不工作的原因是因爲你轉換到10.990,00
和10.990.00
然後要更換所有點與逗號。
相反,你可以轉換,
爲符號,然後轉換.
到,
和符號.
:
price = "10.990,00"
price = price.replace(',','COMMA')
price = price.replace('.',',')
price = price.replace('COMMA','.')
print(price)
或者通過georg
price = price.replace(',','COMMA').replace('.',',').replace('COMMA','.')
注意,我在刪除可選參數的建議replace()
,因爲像1.200.000,30
這樣的數字不會按預期進行轉換。
你實際上並不需要「COMMA」這個東西,只需要'price.replace('。','@')。replace(',','。')。replace('@',',') ' – georg 2015-03-13 15:30:12
@georg你是對的。我會相應地編輯。 – 2015-03-13 15:32:34
如果OP不得不交換3個字符,4個字符等等,那將是一個很大的麻煩:D – Heisenberg 2015-03-13 15:56:39
@Martijn給出了最好的答案。您也可以遍歷price
和replace
。
swap = {'.':',',',':'.'}
def switchDotsAndCommas(text):
text = ''.join(swap.get(k, k) for k in text)
print text
switchDotsAndCommas('10.990,00')
這實際上是'str.translate()'*做的*。但方式,方式更快。 – 2015-03-13 15:37:36
@MartijnPieters由於使用了其他算法或其他方法,速度更快嗎? – Volatil3 2015-03-13 15:39:17
@ Volatil3:它更快,因爲它完全在C中完成。 – 2015-03-13 15:40:56
現有答案在回答您的問題方面做得很好,但退後一步,您想完成什麼?如果您試圖「從網站獲取價格並以當地貨幣顯示價格,而不考慮源貨幣」,則可以將價格轉換爲數字,然後使用您的區域設置正確顯示價格:http: //stackoverflow.com/questions/8421922/how-do-i-convert-a-currency-string-to-a-floating-point-number-in-python和http://stackoverflow.com/questions/3606517/ python-how-to-format-currency-string – Peach 2015-03-13 15:29:17
當然,我上面的建議沒有考慮到貨幣轉換...但這是一個完整的其他問題... – Peach 2015-03-13 15:30:38
我正在刮的網站錯誤地換了逗號和點。 – Volatil3 2015-03-13 15:33:54