2012-04-05 4 views
1

제 문제는 파이썬이 원시 입력을 먼저 읽은 후에 더 이상 입력을 올바르게 읽지 않는다는 것입니다. 나는 많은 것을 시도했지만 그것을 얻을 수없는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?파이썬 입력이 잘못 읽습니까?

file_path = 'C:\\Users\\Neo\\My Documents\\Python Scripts\\FTC Scouting\\sample.txt' 
file = open(file_path, 'r') 
Team_Numbers = [] 

tNum = 'Team Number: ' 
tName = 'Name: ' 
ui = '' 

def list_teams(n): 
    count = 0 
    if n == '1': 
     for line in file: 
      check = line.find(tNum) 
      if not check == -1:   
       print line[len(tNum):] #prints everything after the Team Number: 
      count += 1 

    elif n == 2: 
     for line in file: 
      check = line.find(tName) 
      if not check == -1: 
       print line[len(tName):] #prints everything after the Team Number: 
      count += 1 

while not ui == 'end': 

    ui = raw_input('1: to list Team Numbers\n2: to list Names\n') 
    list_teams(ui) 


file.close() 
+0

무엇이'count' 변수입니까? –

답변

6

파이썬은 강력하게 입력됩니다.

elif n == '2': 
3

그것은 당신의 입력 벌금을 읽는 것. 한 번 파일을 읽었을 때 끝났습니다. 다음에 파일을 반복 할 때 파일이 마술처럼 처음부터 다시 읽기 시작하지 않습니다. 따라서 for line in file:은 한 번 작동 한 다음 끝나면 파일에 아무 것도 없기 때문에 다시 작동하지 않습니다! 이 문제를 해결하려면 list_teams() 함수의 마지막에 file.seek(0)을 넣으십시오. 그러면 파일이 처음으로 재설정됩니다.

아마도 다른 문제 (Ignacio가 버그를 발견하고 다른 최적화가 이루어질 수도 있음)가있을 수 있지만 이는 곧 귀하의 즉각적인 문제입니다.

당신은 가독성을 단지 예를 들어 쉽게 튜플을 list 또는 사전을 사용함으로써 극복 또는 명명 할 수

먼저 반복적 인 코드 블록을, 그것은 더 파이썬을 중복을 줄이고 추가하는 코드를 다시 살펴 수

+0

감사합니다! 나는 그것이 처음부터 다시 읽는 것을 시작하지 않았다는 것을 첫 반복을 통해 알게되었습니다. – UnderWulf

0

list

keys = ['Team Number: ', 'Name: '] 
def list_teams(n): 
    count = 0 
    try: 
     for line in file: 
      check = line.find(keys[n]) 
      if not check == -1:   
       print line[len(keys[n]):] #prints everything after the Team Number: 
      count += 1 
except IndexError: 
    None #Or Any appropriate Error Checking 

이제 두 번째 부분입니다. 대신 찾기를 사용하여 다음 색인, 당신은 단순히 string.partition

keys = ['Team Number: ', 'Name: '] 
def list_teams(n): 
    count = 0 
    try: 
     for line in file: 
      print line.partition(keys[n])[2] 
      count += 1 
except IndexError: 
    None #Or Any appropriate Error Checking 

을 사용할 수 있습니다 그리고 당신은 끝을 reacing 때문에 마지막으로는, list_teams를 여러 번 호출이 실패 할 것 같다. 한 가지 해결책은

keys = ['Team Number: ', 'Name: '] 
def list_teams(n): 
    count = 0 
    with open(file_path,'r') as f: 
     try: 
      for line in file: 
       print line.partition(keys[n])[2] 
       count += 1 
    except IndexError: 
     None #Or Any appropriate Error Checking 

입니다. 또는 파일을 읽기 전에 항상 처음부터 찾을 수 있습니다.

keys = ['Team Number: ', 'Name: '] 
def list_teams(n): 
    file.seek(0) 
    count = 0 
    try: 
     for line in file: 
      print line.partition(keys[n])[2] 
      count += 1 
except IndexError: 
    None #Or Any appropriate Error Checking 
+0

감사합니다! 이것은 키에 대한 나의 이해와 genral에서의 파이썬 사용에 대해 경이를 나타냈다. – UnderWulf