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

时间:2015-03-13 15:22:46

标签: python string

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

price = "10.990,00"
price = price.replace(',','.',1)
price = price.replace('.',',',1)

我做错了什么?

5 个答案:

答案 0 :(得分:10)

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

改为使用str.translate() method

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'

答案 1 :(得分:3)

您的代码无效的原因是您将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之类的数字不会按预期转换。

答案 2 :(得分:2)

@Martijn给出了最好的答案。您还可以迭代pricereplace

swap = {'.':',',',':'.'}
def switchDotsAndCommas(text):
    text = ''.join(swap.get(k, k) for k in text)
    print text

switchDotsAndCommas('10.990,00')

答案 3 :(得分:0)

这可能是一个很长的答案,但是它执行起来很简单,并且不使用任何内置函数:

l=input("enter the input:")
m=[]
for i in l:
 if(i=='.'):
  m.append(',')
 elif(i==','):
  m.append('.')
 else:
  m.append(i)
print(''.join(m))

答案 4 :(得分:-1)

price = "10.990,00"
price = price.replace(',','.')
price1=price[0:3].replace('.',',')
print(price1+price[3:9])