-4

私が書いているスクリプトで同じ定義を数回使用しようとしています。def を 1 回は機能させることができますが、2 回目は機能しません。

def def_test(name):
     COUNT = 0
     Totals = {}
     for line in file_1:
         if COUNT == 0:
             COUNT +=1
             continue
         else:
              quantity = float(line[12])
              persons_name = line[14].strip(" ")
              if persons_name == name:
                     print(name)

if __name__ =="__main__":
     def_test("Adam")
     def_test("Bob")

2回目のパスで「ボブ」を探すにはどうすればよいですか?

4

2 に答える 2

4

質問には十分な情報がないため (私がこれを書いている時点では...)、コード内の別の場所でファイルを開いていると推測され、file_1その開いているファイルへの参照です。それを反復すると、ファイルの最後まで読み取られます。file_1ファイルの先頭を指すようにリセットする必要があります。概念的には、最も簡単な方法は、それを閉じてから再度開くことです。

コードの他の部分でファイルを開く明示的な理由がない限り、ファイルの行を反復処理する慣用的な方法は、ファイルwithを開き、コードを実行してから、自動的に再度閉じるステートメントを使用することです。

例えば:

with open("the_file.txt", "r") as file_1:
    for line in file_1:
        ...

ファイルを開くのは比較的非効率的な作業ですが、あなたのような単純なプログラムの場合、オーバーヘッドは無視できます。このファイルを 1 秒間に数百回以上開いていた場合は、一度だけ開くのが理にかなっています。その場合、呼び出されたコマンドを使用してseek、内部ポインターをファイルの先頭に戻します。の使用に慣れ、実際にパフォーマンスの問題があると判断した場合withにのみ、ファイルを開いて使用することを考え始めることをお勧めします。seek

于 2013-07-29T19:25:39.473 に答える
2

これを試すことができます:

def def_test(name):
     COUNT = 0
     Totals = {}
     with open('file', 'r') as file_1: #open file each time you call function
         for line in file_1:
             if COUNT == 0:
                 COUNT +=1
                 continue
             else:
                 quantity = float(line[12])
                 persons_name = line[14].strip(" ")
                 if persons_name == name:
                     print(name)
于 2013-07-29T19:28:36.480 に答える