2016-06-23 12 views
0

Ich habe eine Textdatei einer Netzwerkgerätekonfiguration und ich habe meine Scrip-Schleifen durch die Zeilen der Datei und hier ist, was ich suche:Python lesen mehr als eine Zeile an eine Liste aus einer Textdatei anfügen

Ich möchte mein Skript an eine Liste anhängen lassen, wenn es ein bestimmtes Wort in der Zeile findet. so weit ich nur in der Lage bin eine einzige Zeile zu meiner Liste anhängen ... hier ist ein Beispiel:

my_file = open('configs.txt', 'r') 
license = [] 
for line in my_file:  
    if line.startswith ("show license verbose"): 
     license.append(line)  
print license 

bisher nur wird es mir, dass eine einzige Zeile mit „Show Lizenz verbose“. und ich möchte, dass es mir 5 Zeilen mehr sagt, nachdem dieser Satz gefunden wurde.

Danke.

Antwort

2

Sie itertools.islice verwenden können folgende Zeilen aus dem Dateiobjekt zu holen:

from itertools import islice 

my_file = open('configs.txt', 'r') 
license = [] 
for line in my_file:  
    if line.startswith("show license verbose"): 
     license.append(line) 
     license.extend(islice(my_file, 5)) 
print license 
+0

Dank @Moses Koledoye. Wie kann ich es haben mehr Zeilen lesen und sie anhängen und zu stoppen, wenn es "Show-Version" bedeutet Ich möchte alles zwischen "show license verbose" und "show version" anfügen – FrankBud

+0

@FrankBud Ich denke, es wird besser sein, wenn Sie das gefragt in einer anderen Frage, da wir bereits eine Antwort darauf gegeben haben. –

+0

Nun, Sie antworteten mit der iTertools islice und ich las, dass ich es einen Start-und-Stop-Parameter übergeben kann und dachte, um zu Ihrer ursprünglichen Frage zu folgen. Bin ich auf dem richtigen Weg, so kann ich eine neue klare Frage rund um die Istello-Insel stellen? – FrankBud

2
my_file = open('configs.txt', 'r') 
license = [] 

for line in my_file: 
    if line.startswith ("show license verbose"): 
     license.append(line) 
     for (i, line) in zip(range(1, 6), my_file): 
      license.append(line) 

print(license) 

Es ist python3 Code für Python 2 werden Sie wahrscheinlich wollen Klammern in letzten Druck entfernen und verwenden xrange statt range

+0

Vielen Dank @Arnial. genau das suche ich. muss nur nachsehen, was die zip() tut :) – FrankBud

+1

Froh, es zu lesen. Ich denke, Sie sollten @ Moses Koledoye Antwort als am besten auswählen. First - Code sieht sauberer (weniger Identität), Seond - Itertools ist Teil der Standart-Python-Bibliothek in C geschrieben, sein, wahrscheinlich, wird schneller sein – Arnial

1

open gibt einen Generator zurück, daher können Sie möglicherweise die nächste Methode verwenden:

# you don't need this input as you already has generator 
source = ['a','b','c','d','e','f','g','h','i','j'] 
# turn it to generator 
g = (i for i in source) 
# create empty list 
lines = [] 
# put what you want inside 
for item in g: 
    if item=='c': # this can be replaced with .startswith() 
     lines.append(item) 
     for i in range(4): 
      lines.append(next(g)) 

In : lines 
Out: ['c', 'd', 'e', 'f', 'g', 'h'] 
Verwandte Themen