2016-08-30 6 views
2

私のプログラムの最後の2行目でこのエラーが発生することがあります。なぜテキストファイルから行を読み込むのかわかりません。文字列索引がテキストファイルを読み取るときに範囲外になる

if (items[0]) == 86947367 : 
     with open("read_it.txt") as text_file: 
      try: 
       price = int(text_file.readlines()[2]) 
      except ValueError: 
       print("error") 
      else: 
       new_price = int(price * (items2[0])) 
       print("£",new_price) 
       price_list.append(new_price) 
       product = (text_file.readline()[1]) 
       print(product) 
+0

'readline()'は 'readlines()'が読んでいるので、それ以上読むことはありません。 –

+0

私は別の行を読むことができますか?最後の2行がなければ、私のコードはうまくいきます。 (私のプログラムのちょうどチャンクです) –

+0

いいえ、それらを一度にすべて読んで、それをどこかに保存してください**または**あなたはそれを一行ずつ読み、データを処理します。 –

答えて

1

中)(readlinesを格納しよう。それをもう一度呼び出すと、何も読むことができなくなります。

この現象を回避するには、readlines()を複数の用途の変数に格納するか、text_file.seek(0)を使用してカーソルをファイルの先頭に戻します。

+0

はい.seek()はありがとうございました。この機能は "カーソル"をリセットするだけですか? –

+0

@ Mikel.JKK:.seek()はイテレータ内のカーソルを特定の位置に移動するだけです。より詳細な回答が必要な場合は、この投稿を確認できます:http://stackoverflow.com/questions/3266180/can-iterators-be-reset-in-python –

0

問題:

price = int(text_file.readlines()[2]) 

readlines()そのようなどれか何かを返さないために)(readlineのを引き起こします。 あなたがreadlines()を使用する場合は、ファイル内の "カーソル" は、最後に到達 のtmp varと、その後

price = tmp[2] 
product =tmp[1] 
関連する問題