0

以前に使用したコードの構築に問題があります。行ごとに6つのデータを含む入力ファイルがあります。問題は、各行を分割するための区切り文字として使用する空白が常にあるとは限らないことです。また、4/4/4/8/8/4文字の不均一なステップで行を分割したいのです。

'   0   0 -16-50.6123 115.393   2'

(0,0、-16、-50.6123,115.393,2)に分割されます。次に、このデータを使用して、キーが最初の3つの数値[0,0、-16]の配列であり、戻り値が最後の3つの数値[-50.6123,115.393,2]の配列である辞書を作成します。

以前、データが常に空白で区切られているときに使用したコード(他の場所からのものであるため変更できません)は次のとおりです。行の新しい不均一な分割に対応するためにすでに必要なコードを変更するための良い方法はありますか?

ありがとう!

def formatter(lines):
    for line in lines:
        if not line.strip(): continue
        yield [to_float(item) for item in line.split()]

dct1 = {}
with open('test.txt') as f1:
    for row in formatter(f1):
        dct1[tuple(row[:3])] = row[3:6]
4

1 に答える 1

0

スライスの幅がわかっている場合は、線をスライスに切り刻みます。これはあなたにアイデアを与えるはずです:

my_string ='   0   0 -16-50.6123 115.393   2'
widths=[4,4,4,8,8,4]
my_start=0
my_end=0
for w in widths:
     my_end+=w
     print my_string[my_start:my_end] #or do whatever you want
     my_start+=w

出力:

   0
   0
 -16
-50.6123
 115.393
   2
于 2013-02-21T16:19:01.617 に答える