使用浮点数和整数解析python字符串

时间:2013-03-11 21:06:02

标签: python parsing floating-point int

我有数百个字符串都具有相同的格式 - 2个整数后跟3个浮点数。一个例子:

1 10 1.2345 5.4321 10.5647

我只想逐个接受这些字符串并将它们解析为各自的整数和浮点数。我可以想到一些方法来做到这一点,但我希望python会有一些优雅的东西,它是用于写作的str.format东西的反转。这似乎是非常基本的功能,所以如果我问的是已经回答的问题,我很抱歉,但我无法在任何地方找到解决方案。有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:4)

一个简单的列表理解应该可以解决这个问题

>>> mystr = '1 10 1.2345 5.4321 10.5647'
>>> [int(s) if s.isdigit() else float(s) for s in mystr.split()]
[1, 10, 1.2345, 5.4321, 10.5647]

答案 1 :(得分:2)

我认为你最喜欢numpy的genfromtxtloadtxt

import numpy as np
import StringIO

s = """1 10 1.2345 5.4321 10.5647
       2 14 434.35 345.34 1000000
       3 8  253.235 2.53 .002345"""
f = StringIO.StringIO(s)

data = np.genfromtxt(f, names = 'id, count, x, y, z', dtype=[int,int,float,float,float])

这为您提供了这些内容的数组,因此第一行可以作为

访问
data[0]
#(1, 10, 1.2345, 5.4321, 10.5647)

或者所有第二栏:

data['count']
#array([10, 14,  8])

顺便说一下,这会将float列中的一个整数转换为float,以防你的一个浮点数恰好是一个整数。

答案 2 :(得分:1)

你可以这样做:

def linep(line):
    line=line.split()
    try:
        ints=map(int, line[0:2])
        floats=map(float, line[2:5])
    except ValueError as e:
        print e
    return ints+floats

print linep('1 10 1.2345 5.4321 10.5647')  

然后以这种方式使用它:

>>> s='''1 10 1.2345 5.4321 10.5647
 -2 11 -0.5 0.5 .3'''
>>> for line in s.splitlines():
...     print linep(line)

打印:

[1, 10, 1.2345, 5.4321, 10.5647]
[-2, 11, -0.5, 0.5, 0.3]