web-dev-qa-db-ja.com

行ごとに2つのテキストファイルを同時に読み取る

2つの異なる言語の2つのテキストファイルがあり、それらは行ごとに配置されています。つまりtextfile1の最初の行は、textfile2の最初の行に対応し、以下同様に続きます。

両方のファイルを行単位で同時に読み取る方法はありますか?

以下は、ファイルがどのように見えるかのサンプルです。ファイルあたりの行数が約1,000,000であると想像してください。

textfile1:

This is a the first line in English
This is a the 2nd line in English
This is a the third line in English

textfile2:

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

希望する出力

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

Java Javaの行ごとに2つのテキストファイルを同時に読み込む-Java がありますが、Pythonはbufferedreaderを使用しません。行ごとに読み取ります。

49
alvas
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))

Python 3で、itertools.izip組み込みのZipを使用。

91
Fred Foo
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()))

出力:

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
16

Pythonでは、行ごとに読み取ることができます。これはデフォルトの動作です。リストを反復するように、ファイルを反復するだけです。

wrt /一度に2つの反復可能要素を反復処理する場合、itertools.izipはあなたの友人です。

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())
3

ファイルを開くのに便利なgeneratorを使用できます。また、より多くのファイルのイテレーターを同時に簡単にサポートできます。

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))

注:

  1. これは python 3コード。ために python 2、 つかいます itertools.izip他の人が言ったように。
  2. Zipは、最短ファイルが反復処理された後に停止します。itertools.Zip_longest重要な場合。
1
YU Chang