Je dois supprimer les caractères de nouvelle ligne dans un fichier énorme f
Je suis en train d'analyser deux lignes à la fois. par exemple. comme ça.Python: Analyser plusieurs lignes dans une boucle for avec str.rstrip() en utilisant des générateurs
def foo(f):
with open(f, "r") as f:
for n, s in zip(f, f):
#something with `n` and `s`
Est-il possible de str.rstrip
directement dans la ligne de boucle for
ou ai-je besoin de le faire séparément dans le corps de la boucle for
. Cela ne fonctionne pas for n, s in zip(f.rstrip(), f.rstrip()):
(Question mise à jour pour le rendre plus concis)
MISE À JOUR:
Ces solutions de la réponse de Barmar et commentaires de PaulCornelius ci-dessous:
def foo2(f):
with open(f, "r") as f:
for n, s in zip ((line.rstrip() for line in f), (line.rstrip() for line in f)):
#Do something with `n` and `s`
et
def foo3(f):
with open(f, "r") as f:
g = (line.rstrip() for line in f)
for n, s in zip(g, g):
#Do something with `n` and `s`
MISE À JOUR 2:
Si vous souhaitez analyser plusieurs fichiers, on peut faire un générateur par fichier (ici deux fichiers):
def foo4(f1, f2):
with open(f1, "r") as f1, open(f2, "r") as f2:
g1, g2 = (line.rstrip() for line in f1), (line.rstrip() for line in f2)
for n1, s1, n2, s2 in zip(g1, g1, g2, g2):
#Do something with `n1`, `s2, `n2` and `s2`
Ah - nice. Serait-ce plus efficace qu'une ligne dans le corps? – user3375672
Probablement à peu près la même chose. – Barmar
OP n'avait pas l'intention d'utiliser deux lignes de 'f1' au lieu d'une de' f1' et une autre de 'f2'? – gyre