将字符串转换为浮点值(将覆盖不同的值变化)

  • 本文关键字:变化 覆盖 字符串 转换 python
  • 更新时间 :
  • 英文 :


我已经搜索过了,但找不到任何有帮助的东西(可能是它不存在(

我正在寻找的是一种将STRING转换为VALUE的方法,它将自动处理不同的变体。

例如

  • 从:"111,111.56"111111.56
  • 123.34.4512334.45
  • 123.34,4512334.45
  • 可以有多个分隔符
    • 1.2.3.34,451,2,3.34,451,2.3.34,451.2,3.34,45

在这个例子中,真正需要做的就是删除任何,.并保留最后一个(如果最后一个是,,则用.替换它(

  • 发件人:1.2.3.34,45

    • 收件人:12334,45
    • 收件人:12334.45
  • 发件人:1.2.3.34.45

    • 收件人:12334.45

我知道它可以通过一个简单的.replace()函数来解决,但我只是觉得也许没有必要重新发明一个轮子,而且已经存在了一些非常聪明的东西。

如果不可能并且唯一的方法是使用.replace()函数。。。悲哀的但一切都很好:(这更多的是关于。。。尝试使用最佳实践。。。

潜在想法:

x= "1.2,3.34,45"
xl = list(x)
a = "".join(["".join([i for i in xl[0:-3] if i not in [".",","]]),"".join(xl[-3:]).replace(",",".")]) if xl[-3] in [".",","] else "".join(xl)
print(a)

我不认为有一种标准的方法可以实现您想要的。

然而,这个功能可以完成任务:

>>> def convert(value):
...     comma = ","
...     dot = "."
...     last_comma_index = value.rfind(comma)
...     last_dot_index = value.rfind(dot)
...     if last_comma_index > last_dot_index:
...         last_index = last_comma_index
...     else:
...         last_index = last_dot_index
...     before_point = value[:last_index]
...     no_commas = "".join(before_point.split(comma))
...     no_dots = "".join(no_commas.split(dot))
...     return no_dots + dot + value[last_index + 1:]
... 
>>> convert("1.2.3.34,45")
'12334.45'
>>> convert("1.2,3.34,45")
'12334.45'
>>> convert("1,2.3.34,45")
'12334.45'
>>> convert("1,2,3.34,45")
'12334.45'

最新更新