Je veux donc que ce script recherche un mot, que vous pouvez déterminer, et son numéro de ligne. Je veux qu'il imprime le texte de cette ligne et les deux suivants. Comment coder la dernière partie (imprimer les trois lignes suivantes)?
def search_passwords():
file = open("D:\\Libaries\\Documents\\resources_py\\pw.txt", "r")
print()
search = input("Enter service: ")
print()
for line in file:
if search in line:
print(the next three lines)
3 Réponses :
Il pourrait y avoir une meilleure solution, mais c'est un peu plus flexible avec un nombre plus élevé de lignes suivantes.
def search_passwords():
file = open("D:\\Libaries\\Documents\\resources_py\\pw.txt", "r")
print()
search = input("Enter service: ")
print()
counter = 3
found = False
for line in file:
if search in line:
found = True
if found:
if counter > 0:
counter -= 1
print(line, counter)
if counter == 0:
break
ce code imprime juste le fichier entier pour moi
Oui, vous avez / aviez raison. J'ai fait une faute de frappe, j'ai écrit counter =-1 au lieu de counter -= 1 . J'ai encore amélioré mon code pour casser après l'impression.
Il y a des cas secondaires que vous n'avez pas mentionnés.
S'il n'y a qu'une seule correspondance, ou s'il n'y a pas de correspondance dans les lignes que vous imprimez juste après, vous pouvez utiliser un seul compteur
def search_passwords():
file = open("D:\\Libaries\\Documents\\resources_py\\pw.txt", "r")
print()
search = input("Enter service: ")
print()
counter = 0
for line in file:
if counter > 0:
counter -= 1
print(line)
if search in line:
counter = 2
print(line)
Cependant, cela double imprimer les lignes si les lignes suivantes contiennent le mot recherché. Vous pouvez bien sûr faire le second if elif , mais alors il ignorera simplement le modèle de correspondance suivant.
Et, si vous n'avez besoin que de la première ou de la seule apparence, vous devez sortir de la boucle une fois que vous avez tout imprimé, et non lu le fichier entier.
Comme je l'ai dit, il faut mieux connaître le comportement attendu et l'exigence, pour écrire un programme solide.
Encore une autre approche avec la gestion des erreurs not found :
with open('file.txt', 'r') as f:
lines = [line.strip() for line in f.readlines()]
try:
i = lines.index(input('Enter service: '))
for j in range(i, i+3):
try:
print(lines[j])
except IndexError:
pass
except ValueError:
print('Service not found!')
Essayez d'utiliser une variable pour vous souvenir du nombre de lignes que vous devez imprimer après / y compris la ligne courante: lorsqu'elle est à zéro, vous n'imprimez pas la ligne; quand ce n'est pas zéro, vous imprimez la ligne et (EXERCICE 1 :) faire quoi avec la variable? Lorsque vous trouvez le mot-clé, vous (EXERCICE 2 :) faites quoi avec la variable?