1

私の問題は、Pythonが最初に生の入力を読み取った後、その後入力を正しく読み取らなくなることです。いろいろやってみたのですが、なかなか取れません。私は何を間違っていますか?

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()
4

3 に答える 3

6

Python は強く型付けされています。

elif n == '2':
于 2012-04-05T05:47:21.887 に答える
3

それはあなたの入力をうまく読んでいます。ファイルを 1 回読み取ったら完了です。次にファイルを反復処理するときに、ファイルが魔法のように最初から再度読み取りを開始することはありません。したがってfor line in file:、終了後にファイルに何もないため、一度は機能しますが、再び機能しません! これを修正するには、関数file.seek(0)の最後に置くだけです。list_teams()これにより、ファイルが最初にリセットされます。

おそらく他にも問題があります (Ignacio がバグを発見し、他にも最適化を行う必要があります) が、これはおそらく差し迫った問題です。

于 2012-04-05T06:03:55.157 に答える
0

コードを再検討して、よりPythonicにし、冗長性を減らし、読みやすさを追加することができます。

listまず、辞書または名前付きタプルを使用して簡単に克服できる反復コードブロック。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

次に、2番目の部分です。検索してからインデックスを作成する代わりに、次のように使用できます。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

そして最後に、list_teamsへの複数の呼び出しは、最後まで到達しているために失敗するようです。1つの解決策は

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
于 2012-04-05T06:05:54.813 に答える