我有一个美国格式的字符串,显示已经过的事件的秒数,例如4,942.221s
。如何在不解析和删除逗号的情况下将其转换为整数的最pythonic方式。我希望获得简单的秒数,在这种情况下为4942
,ms可以被截断。
答案 0 :(得分:1)
您可以先使用float,然后转换为int,如下所示
>>>a= '4,942.221s'
>>>int(float(a.replace(',', '').replace('s','')))
>>>4942
答案 1 :(得分:1)
您可以使用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