J'ai deux fichiers texte dans deux langues différentes et ils sont alignés ligne par ligne. C'est à dire. la première ligne du fichier texte1 correspond à la première ligne du fichier texte2, et ainsi de suite.
Existe-t-il un moyen de lire les deux fichiers ligne par ligne simultanément?
Vous trouverez ci-dessous un exemple de l'apparence des fichiers, imaginez que le nombre de lignes par fichier est d'environ 1 000 000.
fichier texte1:
This is a the first line in English
This is a the 2nd line in English
This is a the third line in English
fichier texte2:
C'est la première ligne en Français
C'est la deuxième ligne en Français
C'est la troisième ligne en Français
sortie désirée
This is a the first line in English\tC'est la première ligne en Français
This is a the 2nd line in English\tC'est la deuxième ligne en Français
This is a the third line in English\tC'est la troisième ligne en Français
Il existe une Java de cette Lire deux fichiers texte ligne par ligne simultanément -Java , mais Python n'utilise pas de tampon de lecture qui lit ligne par ligne. Alors comment procéder?
from itertools import izip
with open("textfile1") as textfile1, open("textfile2") as textfile2:
for x, y in izip(textfile1, textfile2):
x = x.strip()
y = y.strip()
print("{0}\t{1}".format(x, y))
Dans Python 3, remplacez itertools.izip
avec le Zip
intégré.
with open(file1) as f1, open(fil2) as f2:
for x, y in Zip(f1, f2):
print("{0}\t{1}".format(x.strip(), y.strip()))
sortie:
This is a the first line in English C'est la première ligne en Français
This is a the 2nd line in English C'est la deuxième ligne en Français
This is a the third line in English C'est la troisième ligne en Français
Python vous permet de lire ligne par ligne, et c'est même le comportement par défaut - vous parcourez simplement le fichier comme vous le feriez sur une liste.
écrit/itérant sur deux itérables à la fois, itertools.izip est votre ami:
from itertools import izip
fileA = open("/path/to/file1")
fileB = open("/path/to/file2")
for lineA, lineB in izip(fileA, fileB):
print "%s\t%s" % (lineA.rstrip(), lineB.rstrip())
Nous pourrions utiliser generator
pour une ouverture de fichier plus pratique, et il pourrait facilement prendre en charge l'itérateur sur plusieurs fichiers simultanément.
filenames = ['textfile1', 'textfile2']
def gen_line(filename):
with open(filename) as f:
for line in f:
yield line.strip()
gens = [gen_line(n) for n in filenames]
for file1_line, file2_line in Zip(*gens):
print("\t".join(file1_line, file2_line))
Remarque:
python 3
code. Pour python 2
, utilisation itertools.izip
comme d'autres l'ont dit.Zip
s'arrêterait après l'itération du fichier le plus court, utilisez itertools.Zip_longest
si c'est important.