我从格式为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