2016-03-31 11 views
1

をfloat型に文字列を変換する:テキストファイルを読み込むと、私は例えば、番号のリスト、1行に1つずつで、「foo.txtの」と呼ばれるテキストファイルを持っている

0.094195 
0.216867 
0.326396 
0.525739 
0.592552 
0.600219 
0.637459 
0.642935 
0.662651 
0.657174 
0.683461 

は、私が今読みたいですこれらの数字をPythonリストに追加します。次のようにこれを行うには、私のコードは次のとおりです。

x = [] 
file_in = open('foo.dat', 'r') 
for y in file_in.read().split('\n'): 
    x.append(float(y)) 

をしかし、これは私にエラー与える:

ValueError: could not convert string to float 

私が間違っているのは何を?

+2

ファイルの最後に空白行がありますか? – khelwood

+2

'x.append(float(y))'行の前に 'print(y)'を書いて、どの値が変換に失敗しているのかを確認してください。 –

+0

なぜあなたは '分割( '\ n')'していますか? ... split() ' –

答えて

2

編集martineauでコメント

: あなたもNoneまたは空の文字列を排除するためにif y:を使用することができます。

オリジナル回答:

これは、セパレータとして改行文字を使用しているため、あなたに失敗し、したがって、最後の要素は、あなたが、Yが数値であるかどうかを確認するy.isdigit()を追加することができ、空の文字列

です。

x = [] 
file_in = open('sample.csv', 'r') 
for y in file_in.read().split('\n'): 
    if y.isdigit(): 
     x.append(float(y)) 

OR

あなたは read().split("\n")

OR

readlines()には、Yから先頭/末尾の文字を削除変更することができます。それはあなたがまたそれがエラーをキャッチするまでのコードを実行するのpythonトライelseステートメントを使用して試みることができる

>>> float("1.1") 
1.1 

デフォルトのフロート機能を使用して試すことができ、余分な空白

for y in file_in: 
    trimed_line = y.strip() # leading or trailing characters are removed 
+0

'if y:'、 'append(float(y))'と言うこともできます。 – martineau

+0

@martineauはこれ以上同意できません! 'None'または空の文字列を除去する – haifzhan

1

通常、ファイルの末尾に空の行があるので、おそらく空の文字列を浮動させようとしています。

代わりfile_in.read().split('\n')のあなたは使用することができます与えられたファイルからすべての行のリストを返し、存在する場合、最後の空行をスキップしreadlines

for line in file_in.readlines(): 
    x.append(float(line)) 

方法を。

1

とのラインを処理し、 else文を実行します。

ファイルの空白行の末尾にエラーが発生する可能性があります。そのため、try else文を使用してみてください。

0

私はこのような文字列を考えます: '0.1111、0。1111' またはこのアプローチに関する他の

file_in = open('foo.dat', 'r') 
for y in file_in.readlines()[0]: 
    x.append(float(y)) 
1

方法:

x = [] 
with open('foo.dat', 'r') as f: 
    for line in f: 
     if line: #avoid blank lines 
      x.append(float(line.strip())) 

または:

with open('foo.dat', 'r') as f: 
    lines = (line.strip() for line in f if line) 
    x = [float(line) for line in lines] 

最後に、よりコンパクト:

with open('foo.dat', 'r') as f: 
    x = [float(line.strip()) for line in lines if line] 

あなたが持っていないこの方法で空白行を心配して、あなたは適切な変換をm stringfloat

0

解析する文字列が数字であるかどうかを判断する関数を使用できます。この質問1に基づいて、あなたはこうすることができます:

def is_number(s): 
try: 
    float(s) 
    return True 
except ValueError: 
    return False 

x = [] 
file_in = open('foo.dat', 'r') 
for y in file_in.read().split('\n'): 
    if is_number(y): 
     x.append(float(y)) 
関連する問題