web-dev-qa-db-fra.com

Rechercher un fichier texte et imprimer des lignes connexes en Python?

Comment rechercher un mot-clé ou un mot-clé dans un fichier texte, puis imprimer la ligne dans laquelle se trouve ce mot-clé ou cette phrase-clé?

30
Noah R
searchfile = open("file.txt", "r")
for line in searchfile:
    if "searchphrase" in line: print line
searchfile.close()

Pour imprimer plusieurs lignes (de manière simple)

f = open("file.txt", "r")
searchlines = f.readlines()
f.close()
for i, line in enumerate(searchlines):
    if "searchphrase" in line: 
        for l in searchlines[i:i+3]: print l,
        print

La virgule dans print l, empêche les espaces supplémentaires d'apparaître dans la sortie; l'instruction de fin d'impression délimite les résultats de différentes lignes.

Ou mieux encore (en revenant à Mark Ransom):

with open("file.txt", "r") as f:
    searchlines = f.readlines()
for i, line in enumerate(searchlines):
    if "searchphrase" in line: 
        for l in searchlines[i:i+3]: print l,
        print
56
senderle
with open('file.txt', 'r') as searchfile:
    for line in searchfile:
        if 'searchphrase' in line:
            print line

Toutes mes excuses à senderle que j'ai copié de façon flagrante.

20
Mark Ransom

Notez le potentiel d'un indice hors plage avec "i + 3". Vous pourriez faire quelque chose comme:

with open("file.txt", "r") as f:
    searchlines = f.readlines()
j=len(searchlines)-1
for i, line in enumerate(searchlines):
    if "searchphrase" in line: 
        k=min(i+3,j)
        for l in searchlines[i:k]: print l,
        print

Edit: peut-être pas nécessaire. Je viens de tester quelques exemples. x [y] donnera des erreurs si y est hors limites, mais x [y: z] ne semble pas donner d'erreurs pour les valeurs hors limites de y et z.

2
bill