2016-02-29 2 views
1

En ce moment j'ai un bloc de code qui me permet de trouver une ligne exacte dans un fichier bloc-notes et l'ajouter à GTINlist. Cependant, je veux également ajouter la ligne ci-dessous, et la ligne ci-dessous également. Je ne veux cependant pas importer le reste du fichier sous forme de liste. Ce est mon code au moment:Python - Trouver la ligne dans le fichier texte et l'ajouter et les deux lignes suivantes à une liste

GTINlist=[] 
GTIN=input("Please enter your GTIN code. ") 
GTINcodes = [line for line in open('GTINcodes.txt') if GTIN in line] 
stringGTINcode = str(GTINcodes) 
GTINlist.append(stringGTINcode)* 

Répondre

0

est ce que je fait ici:

GTIN=input("Please enter your GTIN code. ") 
with open('GTINcodes.txt', 'r') as file: 
    GTINcodes = file.readlines() #this seperates the lines of the file into the list called GTINcodes 
GTINlist = GTINcodes[GTINcodes.index(GTIN):GTINcodes.index(GTIN) + 3] #create the list GTINlist starting from the index where GTIN is found and add next two lines 
+0

Ah oui, c'est aussi une bonne solution si 'GTINcodes.txt' est pas trop grand et si vous êtes intéressé uniquement sur la première occurence de' 'GTIN'.You peut stocker GTINcodes.index (GTIN) 'dans une variable pour éviter le double calcul. –

+0

Peut-être que OP a édité la question, mais il dit maintenant "Je ne veux cependant pas importer le reste du fichier sous forme de liste". – gil

0

Vous ne pouvez pas utiliser la compréhension de liste dans ce cas. Mais vous pouvez le faire:

GTINlist=[] 
GTIN=input("Please enter your GTIN code. ") 
GTINcodes = [] 
read_ahead = 0 
for line in open('GTINcodes.txt'): 
    if GTIN in line: 
     GTINcodes.append(line) 
     read_ahead = 2 
    elif read_ahead > 0: 
     GTINcodes.append(line) 
     read_ahead -= 1 
stringGTINcode = str(GTINcodes) 
GTINlist.append(stringGTINcode)* 
+0

Merci c'est incroyablement utile. – william188325

0

Le builtin next() avance un itérateur d'un pas. Donc, dans votre cas:

# setup 
GTIN = input("Please enter your GTIN code. ") 
GTINcodes = [] 


extra = 2 # number of extra lines to be appended 

with open('GTINcodes.txt') as f: 
    for line in f: 
     if GTIN in line: 
      GTINcodes.append(line) 
      for _ in range(extra): 
       GTINcodes.append(next(f)) 
      # if need to loop through the rest of the file, comment out break 
      break 

Cela peut encore être simplifiée en utilisant itertools.dropwhile pour sauter facilement les lignes sans GTIN en eux. prend un prédicat et un itératif, et renvoie un itérateur qui fournit des valeurs de l'itérable à partir de la première valeur pour laquelle le prédicat est faux. Alors:

from itertools import dropwhile 

# setup 
GTIN = input("Please enter your GTIN code. ") 

lines_to_take = 3 # first line with GTIN in it, and 2 lines after it 
lines = dropwhile(lambda line: GTIN not in line, open('GTINcodes.txt')) 
GTINcodes = [next(lines) for _ in range(lines_to_take)]