Mon code
def yieldlines(thefile, whatlines):
return (x for i, x in enumerate(thefile) if i in whatlines)
file1=open('/home/milenko/EDIs/site1/newst2.txt','r')
whatlines1 = [line.strip() for line in open('m1.dat', 'r')]
x1=yieldlines(file1, whatlines1)
print x1
J'ai eu
<generator object <genexpr> at 0x7fa3cd3d59b0>
Où dois-je mettre la liste ou dois-je réécrire le code?
Je veux que mon programme écrive le fichier et en lise le contenu pour des lignes spécifiques écrites en m1.dat.J'ai trouvé cette solution Lecture de lignes spécifiques uniquement (Python)
Si vous avez réellement besoin d'une liste, vous pouvez simplement faire:
lst = list(generator_object)
Cependant, si tout ce que vous voulez est d'itérer à travers l'objet, vous n'avez pas besoin d'une liste:
for item in generator_object:
# do something with item
Par exemple,
sqr = (i**2 for i in xrange(10)) # <generator object <genexpr> at 0x1196acfa0>
list(sqr) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
sqr = (i**2 for i in xrange(10))
for x in sqr:
print x,
# 0 1 4 9 16 25 36 49 64 81
Pour convertir une expression de générateur en liste, il suffit de faire:
list(<generator expression>)
Attention cependant, si l'expression du générateur peut générer une liste infinie, vous n'obtiendrez pas ce que vous attendez.