2016-08-01 11 views
1

文字列のリストを浮動小数点のリストに分割することはできません。私はテキストファイル(.vol、しかしそれはちょうどテキストを含む)を開きます。最後の行は非常に長い行です。文字列リストを浮動小数点に分割 - メモリエラー

Params1 437288.59375000 102574.20312500 -83.30001831
Params2 437871.93750000 104981.40625000 362.10000610
Params3 0.00000000
Params4 342 1416 262
Params5 583.34375000 2407.19995117 445.40002441
Params6 20.00000000
Params7 1.70000005
Params8 126879264の
値:
0.25564435 0。 462439 0.1365 0.1367 26.00000000(など、値の何百万があります)

それはtxtファイルの10行ですので、私はしてリストにそれらをロードします。

with open('d:/py/LAS21_test.vol') as f: 
txt = [] 
for line in f: 
    txt.append(line) 

そして私がしようフロートに文字列からそれを変換します

A = [] 
for vx in txt[9]: 
    try: 
     A.append(float(vx)) 
    except ValueError: 
     pass 
print (A[0:20]) 
print (txt[9][0:20]) 

この私を与えることの結果:

[0.0, 2.0, 5.0, 5.0, 6.0, 4.0, 4.0, 3.0, 5.0, 0.0, 4.0, 6.0, 2.0, 4.0, 3.0, 9.0, 0.0, 1.0, 3.0, 6.0] 
0.25564435 0.462439 
0123ちょうど float(txt[9])私は値エラーを取得を使用している場合 - 私は空白を省略する except ValueErrorを使用

[0.25564435, 0.462439] 

:ように私はしたいと思い何

は、正しく分割floatのリストです。 2番目の問題:txt[9].splitを使用することはできません。なぜなら、私は 'メモリエラー'が発生するからです。

これを浮動小数点リストに変換するにはどうすればよいですか?したがって、(あなたがそれを分割する前に、あなたは文字列へのインデックスしようとしているとあなたが山車にスペースを変換しようとしている最初のケースで

1):

+0

あなたが理解しやすいようにするために、入力ファイルの内容を追加する必要があります。 – AntoineB

+0

ちょうど追加されました、ありがとう。 –

答えて

0

正しく理解できれば、txt [9] .split()を作成し、txt [9]が大きすぎるためmap(float, txt[9].split())のようにマップすることはできません。

あなたは、この発電機を試すことができます。

def float_generator(txt): 
     x = '' 
     for c in txt: 
      if c != ' ': 
       x += c 
      else: 
       out = float(x) 
       x = '' 
       yield(out) 

for i in float_generator(txt[9]): 
     print (i) 
0

ここにあなたの問題(コメントで述べたように)でありますValueError

2)2番目のケースでは、おそらくリストに数字が多すぎるため、大きな文字列(したがってMemoryError)の膨大なリストがメモリに残ります。

は、最初にこれを試してみてください:

numbers = [float(s) for s in txt[9].split(' ')] 

これはあなたの番号のリストを与える必要があります。これもMemoryErrorが発生した場合は、手で文字列を反復する必要があります:

numbers = [] 
numstring = [] 
for s in txt[9] 
    # Reached a space 
    if s == ' ': 
     numbers.append(float(numstring)) 
     numstring = [] 
    else: 
     numstring.append(s) 

これは非常に遅くなりますが、メモリに保存されます。

関連する問題