Кортеж Python из параллельных файлов

У меня есть два файла, которые для каждого байта читаются в одном файле, что-то должно быть сделано с байтом в той же позиции в другом, – сказал Xor'ed.

Я надеялся, что у меня будет что-то вроде ниже, но мне пока не повезло:

c = 0 f1 = list(file1.read()) f2 = list(file2.read()) for (a, b) in f1, f2: # set a and b for each byte in turn in f1 and f2 c = a ^ b 

Для меня это изначально казалось довольно похожим на Python, но сейчас я начинаю сомневаться.

Любые указатели очень приветствуются!

Используйте функцию zip() :

 for a, b in zip(f1, f2): 

Если файлы большие, вы, вероятно, захотите использовать небольшие куски и не будете читать весь файл в памяти.

Для текстовых файлов просто зацикливайте прямо на файлы, чтобы получить строки:

 try: from itertools import izip except ImportError: # Python 3, use builtin zip izip = zip with file1, file2: for line1, line2 in izip(file1, file2): for a, b in izip(line1, line2): 

где мы вместо этого используем izip() (только в Python 2), чтобы предотвратить чтение всех файлов в первую очередь. Это также предполагает, что линии имеют одинаковую длину.

Для двоичных файлов читайте в кусках с использованием двух аргументов:

 file1_it = iter(file1, lambda f: f.read(2048)) file2_it = iter(file2, lambda f: f.read(2048)) for chunk1, chunk2 in izip(file1_it, file2_it): for a, b in izip(chunk1, chunk2):