2017-05-03 1 views
0

J'essaie de prendre une entrée de l'utilisateur et de rechercher la chaîne d'un fichier puis d'imprimer la ligne. Quand j'essaie d'exécuter, je continue d'avoir cette erreur. Mon code estAttributeError: l'objet 'str' n'a pas d'attribut 'readline' en essayant de chercher une chaîne et d'imprimer la ligne

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

Votre code est erroné dans tant de niveau. Vous avez 'read()' à partir du fichier, puis en utilisant 'readline()' dans une boucle qui écrase l'entrée de l'utilisateur. – kuro

+0

Et puis vous écrasez le 'zinput' de l'appel d'entrée avec chaque ligne dans les données. –

Répondre

3

Il y a beaucoup de choses à améliorer dans votre code.

  • data est une chaîne, et str n'a pas d'attribut readline().
  • read lira tout le contenu du fichier. Ne fais pas ça.
  • break la boucle une fois que vous trouvez zinput.
  • ne pas oublier de fermer le fichier, lorsque vous avez terminé.

L'algorithme est très simple:

objet fichier

1) est un itératives, lire ligne par ligne.

2) Si une ligne contient votre zinput, imprimez-la.

code:

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

En option, vous pouvez utiliser with pour rendre les choses plus faciles et plus courtes. Il fermera le fichier pour vous.

code:

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

vous pouvez également lui montrer la manipulation de fichier en utilisant 'avec ' – kuro

0

L'un des problèmes semble être d'appeler readline() sur les données renvoyées à partir de votre fichier ouvert. Une autre façon d'aborder ce serait:

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") 

Une chose que j'oublié de mentionner que je l'ai testé ce code avec Python 2.7 et il semble que vous utilisez Python 3. * en raison de l'utilisation de l'entrée() et pas raw_input() pour STDIN.

Dans votre exemple, s'il vous plaît utiliser:

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

Pour Python 3. *