python 逗号分隔符如何快速识别位数_关于python:如果字符串中有逗号作为千位分隔符,如何将字符串转换为数字?...

news/2024/7/4 7:48:09

我有一个字符串,表示一个使用逗号分隔数千的数字。 如何将其转换为python中的数字?

>>> int("1,000,000")

生成ValueError。

在我尝试转换它之前,我可以用空字符串替换逗号,但不知何故感觉不对。 有没有更好的办法?

这感觉怎么样? 功能是有原因的。

import locale

locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )

locale.atoi('1,000,000')

# 1000000

locale.atof('1,000,000.53')

# 1000000.53

那些不适用的地方吗?

+1,但请添加区域设置(使用默认区域设置'C',这仍然会给出ValueError!)。

我认为大师的意思是这样的:locale.setlocale(locale.LC_ALL,'en_US.UTF-8')

感谢您的评论。我添加了一个特定的语言环境。

非常好。这样我就可以处理逗号和点也被切换的欧洲数字。谢谢。

我得到语言环境错误:Traceback (most recent call last): File"F:\test\locale_num.py", line 2, in locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) File"F:\Python27\lib\locale.py", line 539, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting

@TonyVeijalainen:在Linux上,您可以使用locale -a查找系统上可用的语言环境。对于Windows,请尝试这样的答案。

你在哪里发现它是'en_US.UTF-8'? (这是正确的 - 我只是想知道以供将来参考。)它没有出现在python.org网站的谷歌搜索中,也没有在语言环境文档页面上的任何列表:docs.python.org/2/ library / locale.html编辑:我看到你可以找到带有locale -a的语言环境...所以解释器从操作系统本身获取有关语言环境的信息?

@AmadeusDrZaius:在Linux上,语言环境由glibc提供。

有没有什么方法,类似于这个答案,将带逗号的字符串转换为小数?

@EliasZamaria:我认为没有内置函数,但您可以使用replace来删除逗号:decimal.Decimal('123,456.789'.replace(',',''))。

@unutbu,谢谢。我知道我能做到。我只是想知道是否有一种更简单的方式,类似于你的答案。

这对我不起作用,但这样做了 - stackoverflow.com/questions/48843193/

有几种方法可以用数千个分隔符来解析数字。我怀疑@unutbu所描述的方式在所有情况下都是最好的。这也是我列出其他方式的原因。

调用setlocale()的适当位置在__main__模块中。它是全局设置,会影响整个程序甚至C扩展(尽管注意LC_NUMERIC设置不是在系统级别设置,而是由Python模拟)。阅读文档中的注意事项并在这样做之前三思而后行。单个应用程序可能没问题,但从不在图书馆中为广大受众使用它。可能你应该避免使用某些特定的字符集编码来请求语言环境,因为它可能在某些系统上不可用。

使用第三方库之一进行国际化。例如,PyICU允许使用任何可用的语言环境而不影响整个过程(甚至使用特定的千位分隔符解析数字而不使用语言环境):

NumberFormat.createInstance(区域设置( 'EN_US'))。分析("百万")。getLong()

编写自己的解析函数,如果你没有安装第三方库来"正确"地执行它。当不需要严格验证时,它可以像int(data.replace(',', ''))一样简单。

+1推荐简单方法。当我遇到同样的问题时,这就是我所需要的。

编辑修复错字(setlocate应setlocale)。另外,+1。

无耻的自我推销,我确实使用了第三种选择。所以,如果有人有兴趣,请看看这个问题/答案

用空字符串替换逗号,并将结果字符串转换为int或float。

>>> a = '1,000,000'

>>> int(a.replace(',' , ''))

1000000

>>> float(a.replace(',' , ''))

1000000.0

请再次阅读OP问题。特别是在他说:"在我尝试转换它之前,我可以用空字符串替换逗号,但这种方法感觉不对。有更好的方法吗?"

我发现这个答案很有用,因为我的要求与OP几乎相同(将strs转换为int),但我很高兴有一种比接受的答案更简单的方法。

这有效:

(一种肮脏但快速的方式)

>>> a='-1,234,567,89.0123'

>>>"".join(a.split(","))

'-123456789.0123'

我从接受的答案中得到了语言环境错误,但以下更改在芬兰(Windows XP)中有效:

import locale

locale.setlocale( locale.LC_ALL, 'english_USA' )

print locale.atoi('1,000,000')

# 1000000

print locale.atof('1,000,000.53')

# 1000000.53

我试过这个。它有点超出了这个问题:

你得到一个输入。它将首先转换为字符串(如果它是一个列表,例如来自Beautiful soup);

然后到int,

然后漂浮。

它尽可能地得到它。在最坏的情况下,它返回未转换为字符串的所有内容。

def to_normal(soupCell):

''' converts a html cell from beautiful soup to text, then to int, then to float: as far as it gets.

US thousands separators are taken into account.

needs import locale'''

locale.setlocale( locale.LC_ALL, 'english_USA' )

output = unicode(soupCell.findAll(text=True)[0].string)

try:

return locale.atoi(output)

except ValueError:

try: return locale.atof(output)

except ValueError:

return output

#python3 tenzin

def changenum(data):

foo =""

for i in list(data):

if i ==",":

continue

else:

foo += i

return  float(int(foo))

一些解释与该代码一起使用?一碗汤通常配汤匙

>>> import locale

>>> locale.setlocale(locale.LC_ALL,"")

'en_US.UTF-8'

>>> print locale.atoi('1,000,000')

1000000

>>> print locale.atof('1,000,000.53')

1000000.53

这是在美国的Linux上完成的。


http://www.niftyadmin.cn/n/3752798.html

相关文章

关键词之间用分号_论文关键词最少几个

关键词是论文的构成部分,通常位于摘要下方,因此关键词也是非常醒目的一部分,所以关键词的写作很重要,关键词简单来说是对文章核心内容和词语的提炼,读者通过关键词就能了解文章的主要内容,那么论文关键词最…

matlab中sort_Matlab排序的使用及其在弱光图像上的妙用

​ 大家都知道,程序中运用大量的循环往往会导致运行速度降低,为了加快程序运算速度,往往是采用并行运算的方法,本质是是属于使用空间(内存)换取时间。而有些时候,使用排序也可以加快运行速度。碰…

mysql数据库自定义函数格式_MySQL数据库创建自定义函数模板分享

摘要:下文讲述MySQL数据库中创建自定义函数的方法分享,如下所示:下文通过举例的方式讲述MySQL创建自定义函数的方法---例1:定义一个无参数的自定义函数 fn_maomaodrop function if exists fn_maomao; ---如果函数存在,则删除此自定…

以OpenGL/ES视角介绍gfx-hal(Vulkan) Shader/Program接口使用

文档列表见:Rust 移动端跨平台复杂图形渲染项目开发系列总结(目录) 背景: The right way to tackle this in Vulkan is to use resource descriptors. A descriptor is a way for shaders to freely access resources like buffer…

mysql analyze_mysql的analyze,check,checksum,optimize,explain

ANALYZE TABLE用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的…

go 链接mysql当地时间_Golang, MySQL连接不设置时区的问题

Golang, MySQL连接不设置时区的问题发布时间:2020-06-25 08:11:08来源:51CTO阅读:1319作者:EDELWEISS_21gpackage mainimport ("fmt""github.com/go-xorm/xorm"_ "github.com/jinzhu/gorm/dialects/mysq…

无向图最短路径问题

题目&#xff1a;无向图G有N个结点(1<N<1000)及一些边&#xff0c;每一条边上带有正的权重值。 找到结点1到结点N的最短路径&#xff0c;或者输出不存在这样的路径。 解决思路&#xff1a;动态规划 1、首先使用邻接矩阵存储无向图 2、将找到结点1到节点N的最短路径分解成…

java mysql dump_Java 调用Mysql dump 备份数据库详解

SimpleDateFormat sdf new SimpleDateFormat("yyyyMMddHHmmss");try {String name sdf.format(new Date());String filePath System.getProperty("user.dir") "//" name ".sql";// 系统执行器Runtime rt Runtime.getRuntime();…