2017-01-18 4 views
0

正規表現を処理しないため、私の問題は異なります。だから私はそれが少し違うと思う。私はこのエラーがある。私のコードはValueErrorを処理する方法:Pythonのfloat()の無効なリテラル

with open(item[1]) as f: 
    lines = f.readlines() 
    print 'lines', lines 
for k, line in enumerate(lines): 
    data_temporary = line.strip().split("\r\n") 

私はdata_temporary私を印刷するとき、 "行" は、私が

['512220  0  20  34.4  2.4  0  10010  913  52 
0.00\n', '512221  1  30  34.6  2.3  0  10230  910.3 
54  0.00\n', '512222  2  50  34.8  2.1  0  10020  
932  56  0.00\n', '512223  3  60  35.4  2.5 
0  10340  945.5  58  0.00'\n] 

をfollwingしまった印刷である

512220  0  20  34.4  2.4  0  10010  913  52  0.00 
512221  1  30  34.6  2.3  0  10230  910.3  54  0.00 
512222  2  50  34.8  2.1  0  10020  932  56  0.00 
512223  3  60  35.4  2.5  0  10340  945.5  58  0.00 

ように私のcsvファイルを検索します

ValueError: invalid literal for float(): 512220  0  20  34.4  
2.4  0  10010  913  52  0.00 

次の1行しか得られません。

['160129 29 0000  0  0.04  5.3  2.04 
    0.00  11758  9.13  52  0.00'] 

これらのコマンドを試したところ、結果は次のとおりです。 。 data_temporary = line.strip()。スプリット(」「)

['512220', '', '', '', '', '', '', '0', '', '', '', '', '', '20', '', '', '', 
'', '', '', '34.4', '', '', '', '', '', '2.4', '', '', '', '', '', '0', '', '', 
'', '10010', '', '', '', '', '', '913', '', '','', '', '', '52', '', '', 
'', '', '', '0.00'] 

私はSOで見つかったさまざまなソリューションを適用しようとしましたが、動作しませんでした。私が使用しようとしているように

lines = map(lambda l: l.strip().split('\t'), lines) and some others. 

私は文字列にリストを中断し、次にそれを操作しなければならないと思います。 誰かがこの問題を解決するのに役立ちますので、私は理解しやすくなります。ありがとう

+1

は、なぜあなたは 'に分割されている\ rを\ N '?ファイルを反復処理すると、* lines *を反復処理します。 * white space *を分割する 'line.split()'がほしいだけです。実際、次のように動作します: '[list(map(float、line。split()))の行のために –

+0

[Split string of Pythonの空白を分割する]の可能な複製(http://stackoverflow.com/questions/8113782/split-string-on-whitespace-in-python) – TemporalWolf

答えて

1

forループを持つファイルを反復処理すると、各繰り返しが1行になります。その行のsplit()に電話して、空白で区切ってリストに入れることができます。

with open('filename.txt', 'r') as f: 
    for line in f: 
     data = line.split() 
     print data 

     z = float(data[3]) 

出力:私はfloatごとフィールドを変換示唆していますので、

['512220', '0', '20', '34.4', '2.4', '0', '10010', '913', '52', '0.00'] 
['512221', '1', '30', '34.6', '2.3', '0', '10230', '910.3', '54', '0.00'] 
['512222', '2', '50', '34.8', '2.1', '0', '10020', '932', '56', '0.00'] 
['512223', '3', '60', '35.4', '2.5', '0', '10340', '945.5', '58', '0.00'] 

あなたの要素の多くは、整数のように見えます。代わりに、私は個々の列を選び、それらを変換します。

フィールドの名前がわからないので、いくつか作成しました。ここでフィールドは適切な型に変換されている辞書のリストにこのファイルをロードするいくつかのコードです:

from pprint import pprint 

fields = [ 
    ('id', int), 
    ('n', int), 
    ('s', int), 
    ('a', float), 
    ('b', float), 
    ('z', int), 
    ('n2', int), 
    ('top', float), 
    ('x', int), 
    ('bottom', float), 
] 

def read_data(path): 
    with open(path, 'r') as f: 
     for line in f: 
      data = line.split() 

      res = {} 
      for n, field in enumerate(fields): 
       name, _type = field 
       res[name] = _type(data[n]) 
      yield res 

pprint(list(read_data('data.txt'))) 

出力:

[{'a': 34.4, 
    'b': 2.4, 
    'bottom': 0.0, 
    'id': 512220, 
    'n': 0, 
    'n2': 10010, 
    's': 20, 
    'top': 913.0, 
    'x': 52, 
    'z': 0}, 
{'a': 34.6, 
    'b': 2.3, 
    'bottom': 0.0, 
    'id': 512221, 
    'n': 1, 
    'n2': 10230, 
    's': 30, 
    'top': 910.3, 
    'x': 54, 
    'z': 0}, 
{'a': 34.8, 
    'b': 2.1, 
    'bottom': 0.0, 
    'id': 512222, 
    'n': 2, 
    'n2': 10020, 
    's': 50, 
    'top': 932.0, 
    'x': 56, 
    'z': 0}, 
{'a': 35.4, 
    'b': 2.5, 
    'bottom': 0.0, 
    'id': 512223, 
    'n': 3, 
    'n2': 10340, 
    's': 60, 
    'top': 945.5, 
    'x': 58, 
    'z': 0}] 
+0

その働く助けのためにたくさんお世辞してください – rob

+0

あなたは大歓迎です。データを正しいタイプに「自動的に」解析するコードをいくつか追加しました。スタックオーバーフローへようこそ。すべての有益な回答を優先投票し、問題を最もよく解決する回答を「受け入れる」ことを覚えておいてください。 –

+0

あなたはすべての列を別々に変換することを意味しますか?あなたは例を挙げることができますか?私はあなたの答えがうまく動作し、またジョシュ1が働くのであなたの答えを受け入れていますが、私は例と助けのためにたくさんのthanxを – rob

0

''フロートのための有効な値ではありません。

data_temporary = line.split()を試してみてください。リストの内包表記を使用して

または、:

values = [float(item) for item in line.split() if item]

+0

返信用に多すぎるあなたのソリューションは完全に正常に動作します。 – rob

関連する問題