2017-11-20 16 views
0

特定の単語のためのtxtファイルを検索し、行全体を印刷したい:私は私のコードは、現在ある

admin_username_choice = input("Enter the user's username: ") 
with open("data.txt") as f: 
    line = f.read().split() 
for line in f: 
    if admin_username_choice in line: 
     print(line) 
    else: 
     print("Incorrect information") 

が、これはプリントアウト - ラインのためにFに: とValueError:閉じ上のI/O操作をファイル。

私が間違っていることを教えてもらえますか?

答えて

1

この

admin_username_choice = input("Enter the user's username: ") 
lines='' #just to initialize "lines" out of the with statement 
with open("data.txt") as f: 
    lines = f.read().split() 
#"f" becomes "lines" here. You will already have closed "f" at this point 
for line in lines: 
    if admin_username_choice in line: 
     print(line) 
    else: 
     print("Incorrect information") 
+0

通常、質問者があなたがしたことをなぜ理解したかを理解するのに役立つ説明を少し追加することが適切です。 – Aaron

+0

それは本当です。 Lemme edit – SuperStew

+0

'lines'は初期化する必要はなく(ステートメントはスタックフレームをプッシュまたはポップしません)、' .split() 'の結果がリストを返すので、リストとなります。 – Aaron

5

withは残りのコードでは、それはアクセスできないようになってファイルを閉じてください。あなたはインデントをチェックしたいかもしれません。

admin_username_choice = input("Enter the user's username: ") 
with open("data.txt") as f: 
    line = f.read().split() 
    if admin_username_choice in line: 
     print(line) 
    else: 
     print("Incorrect information") 
1

インデントブロックがオフです。 withステートメントは、forブロックに移動するとファイルを閉じます。このコードは、あなたが望むことをする必要があります。

admin_username_choice = input("Enter the user's username: ") 
with open("data.txt") as f: 
    for line in f: 
     if admin_username_choice in line.split(): 
      print(line) 
     else: 
      print("Incorrect information") 
関連する問題