2010-05-12 298 views
6

我有一个包含6,52353753563E-7形式的数字的大文件。所以这个字符串中有一个指数。 float()就此死亡。虽然我可以编写自定义代码来将字符串预处理为float()可以吃的东西,但我正在寻找将这些转换为float的pythonic方式(类似于传递到某处的格式字符串)。我必须说我很惊讶float()不能处理这样一个指数的字符串,这是很常见的东西。在Python中解析表示具有指数*的浮点数*的字符串

我使用python 2.6,但如果需要的话,3.1是一个选项。

回答

13

与指数无关。问题是逗号而不是小数点。

>>> float("6,52353753563E-7") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 6,52353753563E-7 
>>> float("6.52353753563E-7") 
6.5235375356299998e-07 

对于一般方法,参见locale.atof()

+0

正确。顺便提一下,如果在Python提示符中输入“6,52353753563E-7”,它将被解析为元组(6,5235.3753563) - 这很明显,为什么它看起来很奇怪。 – 2010-05-12 22:47:40

+0

啊,谢谢。当计时器让我时,我会将其标记为已接受。 – Lucas 2010-05-12 22:47:53

+0

在相关说明中,我可以以某种方式让python识别逗号吗? C#和Java可以做到这一点。世界上许多地方都使用逗号作为小数点分隔符。 – Lucas 2010-05-12 22:50:33

1

你的问题不是在指数却在逗号。 with python 3.1:

>>> a = "6.52353753563E-7" 
>>> float(a) 
6.52353753563e-07