1
votes

Comment imprimer les prochaines lignes

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)


1 commentaires

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?


3 Réponses :


1
votes

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


2 commentaires

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.



1
votes

Il y a des cas secondaires que vous n'avez pas mentionnés.

  • Et si plusieurs lignes contiennent le mot recherché? Quel est votre comportement attendu?
  • Que faire si la ligne juste après la ligne correspondante contient le mot recherché?
  • Quelle est la taille du fichier et pouvez-vous le charger en mémoire?

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.


0 commentaires

1
votes

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!')


0 commentaires