2017-10-26 30 views
1
tiedosto = input("Enter the name of the file: ") 
file = open(tiedosto,"r") 
luku = False 
while not luku: 

    genre = input("> ") 

    if genre == "exit": 
     luku = True 
    else: 
     for rivi in file: 
      rivi = rivi.strip() 
      osat = rivi.split(";") 
      if rivi.find(genre) != -1: 
       print(osat[0]) 

初めて入力を求めると、forループに行き、リストを通過して印刷されますが、2回目は入力しませんforループ。代わりに、 "exit"と書くまで入力を求めます。これをどうやって解決するのですか?無限ループwhileループとリストを使用しているとき

答えて

0

それはまだループを通過しているが、一度ファイルを読んだ後、ファイルポインタは何もファイルの末尾にとどまる読むために左に - 私たちはfile.seek(0)と、それをリセットするまで:

else: 
    file.seek(0) # reset the file pointer to the beginning of the file. 
    for rivi in file: 
あなたが行ずつ読み込むファイルを開くと

はまた、名前fileたちはfinのように、別の変数名を使用することを検討して、上書きしたくないビルトインキーワードpythonで、など

0

ですファイルが終了するまでだから、

file=open(tiedosto,"r")は他の終わりにelseなど

file.close() 内にある必要があります。このようにして、毎回最初からファイルを読み始めるループがあります。だから、:これはあなたの中のファイルの行とのfileListという名前のリストが表示されます

fileList = infile.readlines() 

else: 
    infile=open(tiedosto,"r") 
    for rivi in file: 
     rivi = rivi.strip() 
     osat = rivi.split(";") 
     if rivi.find(genre) != -1: 
      print(osat[0]) 
    infile.close() 

はまた、小さなファイルのために、それはちょうどので、メモリ内のようなものを、ファイルの内容を維持するために、おそらくより高速だということに注意してくださいそれ。

0

他の人が言っていたように、ファイルを読むと、リセットされていない限り、最後にカーソルを置きます。 1つの可能性は、ファイルをあなたのelseループに読み込むことです。あなたがこれを行う場合は、ファイルが大きい場合には、しかし、しかし、高価で、ファイルが正しく

tiedosto = input("Enter the name of the file: ") 
luku = False 
while not luku: 

    genre = input("> ") 

    if genre == "exit": 
     luku = True 
    else: 
     with open (tiedosto, 'r') as file: 
      for rivi in file: 
       rivi = rivi.strip() 
       osat = rivi.split(";") 
       if rivi.find(genre) != -1: 
        print(osat[0]) 

この閉じていることを確認してください。毎回ファイルを読み込むのではなく、ファイルの関連する行を一度キャッシュすると、パフォーマンスが向上する可能性があります。それでも

openを使用していますが、最初に処理を実行します。

tiedosto = input("Enter the name of the file: ") 
collection = [] 
with open (tiedosto, 'r') as file: 
    for rivi in file.readlines(): 
     collection.append((rivi, rivi.strip().split(';'))) 

luku = False 
while not luku: 

    genre = input("> ") 

    if genre == "exit": 
     luku = True 
    else: 
     for rivi, osat in collection: 
      if rivi.find(genre) != -1: 
       print(osat[0]) 
関連する問題