使用float和int解析python字符串

使用float和int解析python字符串,python,parsing,floating-point,int,Python,Parsing,Floating Point,Int,我有数百个字符串,它们都有相同的格式——2个整数后跟3个浮点数。例如: 1 10 1.2345 5.4321 10.5647 我只想一个接一个地获取这些字符串,并将它们解析为各自的int和float。我可以想出一些方法来做到这一点,但我希望python会有一些优雅的东西,类似于用于编写的str.format的东西。这似乎是非常基本的功能,所以如果我问了一些已经回答的问题,我很抱歉,但我在任何地方都找不到解决方案。有什么想法吗?谢谢。简单的列表理解就可以了 >>> mystr

我有数百个字符串,它们都有相同的格式——2个整数后跟3个浮点数。例如:

1 10 1.2345 5.4321 10.5647

我只想一个接一个地获取这些字符串,并将它们解析为各自的int和float。我可以想出一些方法来做到这一点,但我希望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的
genfromtxt
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])

顺便说一下,这将把float列中的整数转换成float,以防其中一个float恰好是整数。

您可以执行以下操作:

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]

我公司的防火墙封锁了这个网站。嘿,我想他们不想让你太努力了吧?它的开头是:“如果你是一名开发人员,你要问另一名开发人员一个技术问题(在论坛上、通过电子邮件、聊天频道或面对面),你最好准备好回答“你尝试了什么?”“这会将负整数转换为浮点数。这可能不是问题,但是
ast.literal\u eval
可以避免。谢谢。类似的事情是我的选择之一。不过,我希望得到一些简短而甜蜜的东西,有点像格式化的输出。