I have two files, and I want to perform some line-wise operation across both of them. (In other words, the first lines of each file correspond, as do the second, etc.) Now, I can think of a number of slightly cumbersome ways to iterate across both files simultaneously; however, this is Python, so I imagine that there is some syntactic shorthand.
In other words, is there some simple way to adapt the
for line in file:
so that it pulls data from both files simultaneously?
itertools.izip to join the two iterators.
from itertools import izip for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)):
If the files are of unequal length, use
In Python 3, use
zip_longest instead. Also, use a
with to open files, so that closing is handled automatically even in case of errors.
with open(file1name) as file1, open(file2name) as file2: for line1, line2 in zip(file1, file2): #do stuff
You could try
for line1, line2 in zip(file1, file2): #do stuff
Careful though, this loop will exit when the shorter file ends.
When using Python 2,
itertools.izip is better for this sort of thing because it doesn’t create a
A complete example for posterity:
from itertools import izip, izip_longest file1name = '/some/path/and/file' file2name = '/another/path/and/another/file' with open(file1name) as file1, open(file2name) as file2: for line1, line2 in izip(file1, file2): # or izip_longest # do something with the lines
with ensures the files are cleaned up after use, even if an exception occurs.