如何在字符串中交换逗号和点

Vol*_*il3 1 python string

我从网站获取价格格式:10.990,00这样没有意义.需要做什么才能成为10,990.00.我试过跟随,但它正在取代所有.

price = "10.990,00"
price = price.replace(',','.',1)
price = price.replace('.',',',1)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mar*_*ers 10

在用点替换一个逗号后,用逗号替换第一个点.str.replace()插入的第一个点不能免于被第二个str.replace()调用替换.

改用str.translate()方法:

try:
    from string import maketrans   # Python 2
except ImportError:
    maketrans = str.maketrans      # Python 3

price = price.translate(maketrans(',.', '.,'))
Run Code Online (Sandbox Code Playgroud)

这会交换点的逗号,反之亦然,因为它遍历字符串,并且不会进行双重替换,并且启动速度非常快.

我使代码与Python 2和3兼容,其中string.maketrans()静态str.maketrans()函数替换.

这里的例外是Python 2 unicode; 它与str.translate()Python 3中的工作原理相同,但没有maketrans工厂可以为您创建映射.您可以使用字典:

unicode_price = unicode_price.translate({u'.': u',', u',': u'.'})
Run Code Online (Sandbox Code Playgroud)

演示:

>>> try:
...     from string import maketrans   # Python 2
... except ImportError:
...     maketrans = str.maketrans      # Python 3
... 
>>> price = "10.990,00"
>>> price.translate(maketrans(',.', '.,'))
'10,990.00'
Run Code Online (Sandbox Code Playgroud)