2017-05-03 4 views
0

ユーザーからの入力を受け取り、ファイルから文字列を検索してその行を印刷しようとしています。実行しようとすると、このエラーが発生し続ける。私のコードはAttributeError: 'str'オブジェクトに文字列を検索して行を検索しようとしたときに 'readline'属性がありません

file = open("file.txt", 'r') 
data = file.read() 
zinput = str(input("Enter the word you want me to search: ")) 
for zinput in data: 
    line = data.readline() 
    print (line) 
+1

あなたのコードは非常に多くのレベルで間違っています。あなたはファイルから 'read()'を行い、基本的にユーザ入力を上書きする 'readline()'をループで使用しました。 – kuro

+0

そして、入力呼び出しの 'zinput'をデータのすべての行で上書きします。 –

答えて

3

あなたのコードで改善するべきことがたくさんあります。

  • data

    は文字列であり、かつstrには属性readline()を持っていません。
  • readは、ファイルからすべてのコンテンツを読み取ります。これをしないでください。
  • breakループは一度zinputを見つける。
  • 完了したら、ファイルを閉じることを忘れないでください。

アルゴリズムは、本当に簡単です:

1)ファイルオブジェクトが反復可能である、行ずつそれを読んで。

2)1行にzinputが含まれている場合は、それを印刷してください。

コード:

file = open("file.txt", 'r') 
zinput = str(input("Enter the word you want me to search: ")) 
for line in file: 
    if zinput in line: 
     print line 
     break 
file.close() 

必要に応じて、あなたは物事を簡単かつ短くするwithを使用することができます。ファイルを閉じます。

コード:問題の

zinput = str(input("Enter the word you want me to search: ")) 
with open("file.txt", 'r') as file: 
    for line in file:  
     if zinput in line: 
      print line 
      break 
+0

あなたは 'with'を使って彼にファイル処理を示すこともできます – kuro

0

一つは、あなたの開いたファイルから返されたデータにreadline()を呼び出すとになりそうです。これにアプローチする別の方法は次のようになります。私は言及を忘れてしまった

flag = True 
zInput = "" 
while flag: 
    zInput = str(raw_input("Enter the word you want me to search: ")) 
    if len(zInput) > 0: 
     flag = False 
    else: 
     print("Not a valid input, please try again") 

with open("file.txt", 'r') as fileObj: 
    fileString = fileObj.read() 
    if len(fileString) > 0 and fileString == zInput: 
     print("You have found a matching phrase") 

ことの一つは、私は、Python 2.7でこのコードをテストしていることであり、あなたは、Python 3を使用しているようにそれがあるため、入力の使用の*になります() STDINの場合はraw_input()ではありません。あなたの例では

は、使用してください:

zInput = str(input("Enter the word you want me to search: ")) 

のPython 3の場合*

関連する問題