我有数百个字符串都具有相同的格式——2 个整数后跟三个浮点数。一个例子:
1 10 1.2345 5.4321 10.5647
我只想一个接一个地获取这些字符串并将它们解析为它们各自的整数和浮点数。我可以想出几种方法来做到这一点,但我希望 python 能有一些优雅的东西,一种与str.format
用于写作的东西相反的东西。这似乎是非常基本的功能,所以如果我问的是已经回答的问题,我很抱歉,但我在任何地方都找不到解决方案。有什么想法吗?谢谢。
我有数百个字符串都具有相同的格式——2 个整数后跟三个浮点数。一个例子:
1 10 1.2345 5.4321 10.5647
我只想一个接一个地获取这些字符串并将它们解析为它们各自的整数和浮点数。我可以想出几种方法来做到这一点,但我希望 python 能有一些优雅的东西,一种与str.format
用于写作的东西相反的东西。这似乎是非常基本的功能,所以如果我问的是已经回答的问题,我很抱歉,但我在任何地方都找不到解决方案。有什么想法吗?谢谢。
一个简单的列表理解应该可以解决问题
>>> 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]
我认为您最好使用 numpy'sgenfromtxt
或loadtxt
:
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])
顺便说一句,这会将浮点列中的整数转换为浮点数,以防您的浮点数恰好是整数。
你可以这样做:
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]