3

私は何百もの文字列を持っていますが、それらはすべて同じ形式です。2つの整数の後に3つの浮動小数点数が続きます。例:

1 10 1.2345 5.4321 10.5647

これらの文字列を1つずつ取得し、それぞれのintとfloatに解析したいと思います。str.formatこれを行うにはいくつかの方法が考えられますが、Pythonには、書き込みに使用されるものとは逆の、エレガントなものが含まれることを期待していました。これは非常に基本的な機能のように思われるので、答えられたものを求めている場合は申し訳ありませんが、どこにも解決策が見つかりません。何かご意見は?ありがとう。

4

3 に答える 3

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]
于 2013-03-11T21:10:49.433 に答える
2

genfromtxtnumpyや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)

またはすべての2番目の列:

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

ちなみに、これは、floatの1つがたまたま整数である場合に備えて、float列の整数をfloatに変換します。

于 2013-03-11T21:21:40.277 に答える
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]
于 2013-03-11T21:44:53.313 に答える