2017-07-07 13 views
0

入力ファイル "input.txt"があります。それは次のようになります。このコードが間違って実行されるのはなぜですか?

7 
4 
2 
5 
2 
9 
8 
6 
10 
8 
4 

とコードがあります:

inn = open("/storage/emulated/0/input.txt", "r") 
a = 0 
b = 10 
array = [] 

while not a == b: 
    for i, line in enumerate(inn): 
     if i == a: 
       array += str(line) 
    a+=1 
print(array) 

私は「アレイ」変数内のすべての数字を配置する必要がありますが、私は、コードを実行wher - 私は空を取得「アレイ」 。コードに間違いがありますか?

(などのnoobの質問には申し訳ありません)

+0

あなたは 'array'をまったく変更していません... –

+0

' if'ブロックの中にプリントを置くことは、あまりにも実際に実行されているかどうかを見てください。 – khelwood

+0

'array = numpy.genfromtxt(filename、dtype = int)'を使ってそれらの値を変数 'array'に読み込みます。 – Michael

答えて

1

私はあなたのエラーを再現することはできません。また、あなたのコードを実行するときに私は空の配列を取得しません。次のコードとその結果を参照してください。私はまだnp.genfromtxtを使用することをお勧めします。

コード:

import numpy as np 

# I have input.txt in same directory as this .py-file 

# np.genfromtxt with int and with string 
approach1a = np.genfromtxt('input.txt', dtype=int) 
approach1b = np.genfromtxt('input.txt', dtype=np.str_) 

# list comprehension 
approach2 = [] 
with open('input.txt') as file: 
    approach2 = [str(line) for line in file] 

# like your approach, but without a, b and the if statement 
approach3 = [] 
with open('input.txt') as file: 
    for line in file: 
     approach3.append(line) 

# your code 
inn = open("input.txt", "r") 
a = 0 
b = 10 
array = [] 
while not a == b: 
    for i, line in enumerate(inn): 
     if i == a: 
      array += str(line) 
    a+=1 

結果:

>>> approach1a 
array([ 7, 4, 2, 5, 2, 9, 8, 6, 10, 8, 4]) 
>>> approach1b 
array(['7', '4', '2', '5', '2', '9', '8', '6', '10', '8', '4'], 
     dtype='<U2') 
>>> approach2 
['7\n', '4\n', '2\n', '5\n', '2\n', '9\n', '8\n', '6\n', '10\n', '8\n', '4'] 
>>> approach3 
['7\n', '4\n', '2\n', '5\n', '2\n', '9\n', '8\n', '6\n', '10\n', '8\n', '4'] 
>>> array 
['7', '\n'] 

openであなただけの行を反復処理することができるためだけinpurファイルの最初の行は、あなたのコードを読まれる理由があります一度。もしあなたがそれをしたら、あなたは元に戻ることはできません。それを理解するためには、たとえば@Aaron Hallのアンカーをthis questionにしてください:方法はnextしかありませんが、ここに戻って行を戻す方法はありません。 aの値を1に設定した場合、つまり入力ファイルの最初の行をarrayに追加した後に、すべての行がopenの1度使用された時点に達しました。これはなぜあなたのコードは最初の行だけを読み取るのですか?arrayが空リストであると主張し、なぜ私はapproach3を提案したのですか?

+0

ありがとう:) – maxpushka

関連する問題