2016-08-30 3 views
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()을 변수에 여러 용도로 저장하거나 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()을 야기한다. 는 tmp를 VAR()에서 readlines 메쏘드를 저장하려고하면 readlines()를 사용하는 경우 다음

price = tmp[2] 
product =tmp[1] 
관련 문제