我从一个网站获取价格格式:10.990,00这样没有意义。需要做什么才能成为10,990.00。我试过跟随,但它正在取代所有。
price = "10.990,00"
price = price.replace(',','.',1)
price = price.replace('.',',',1)
我做错了什么?
答案 0 :(得分:10)
首先用点替换第一个逗号后,用逗号替换第一个点。插入的第一个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'
答案 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给出了最好的答案。您还可以迭代price
和replace
。
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])