【问题标题】:Convert an american style minute string into integer value将美式分钟字符串转换为整数值
【发布时间】:2016-07-22 05:50:48
【问题描述】:

我得到了一个美国格式的字符串,它显示了一个经过的事件的秒数,比如4,942.221s。如何在不解析和删除逗号的情况下将其转换为整数的最 Pythonic 方式。我想得到简单的秒数,在这种情况下是4942,ms 可以被截断。

【问题讨论】:

  • “不删除逗号”是什么意思?
  • @juanpa.arrivillaga 在德国,您不会用逗号分隔大量数字,因此您不会说 4,723,192.123 而是 4723182,123。
  • 我知道不同语言环境中数字格式的差异。我从您在另一个答案中的评论中看到,您可能正在搜索 locale 库功能。

标签: python string type-conversion


【解决方案1】:

您可以先使用float,然后转换为int,如下所示

>>>a= '4,942.221s'
>>>int(float(a.replace(',', '').replace('s','')))
>>>4942

【讨论】:

  • 这对我来说是一个解决方案,现在。感谢那。我在想的是某种使用数字格式的通用方法,具体取决于时区左右。我还不知道python中有这样的机制,想了解一下。
【解决方案2】:

您可以使用locale 库来实现这一点,该库

允许程序员处理特定的文化问题 应用程序,而不需要程序员知道所有 执行软件的每个国家/地区的详细信息。

通常,这将用于处理格式化字符串等某些问题,同时与区域设置无关,但是,如果您的系统支持美式英语区域设置,那么您可以执行以下操作,这有点 hackey , 来解决你的问题:

>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atoi('123,456,789')
123456789
>>> locale.atof('123,456.787')
123456.787
>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/juan/anaconda3/lib/python3.5/locale.py", line 595, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> american_string = '4,942.221s'
>>> int(locale.atof(american_string[:-1]))
4942

您可能必须弄清楚传递给setlocale 函数的第二个参数的确切参数,因为它取决于您的系统。例如,请注意当我尝试设置德语语言环境时出现的错误,我的系统目前不支持该语言环境。如果你在 Ubuntu 上,以下应该可以工作:sudo apt-get install language-pack-en-base

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多