Python 跳过zip中的元素

Python 跳过zip中的元素,python,Python,我有两个压缩的文件,如下所示: for line in zip(open(file1), open(file2)): # do-something 不幸的是,现在file2已经更改,并且在开始处还有一行。是的,我可以手动(或使用额外的脚本/程序)解决这个问题,但由于实际涉及的文件数量很大,我更愿意在这个级别上解决这个问题 所以,我想要的是如下内容(如果open(file)是可订阅的,那么这将是有效的): 看看: Edit:从zip改为itertools.izip函数。open提供了一个

我有两个压缩的文件,如下所示:

for line in zip(open(file1), open(file2)):
    # do-something
不幸的是,现在file2已经更改,并且在开始处还有一行。是的,我可以手动(或使用额外的脚本/程序)解决这个问题,但由于实际涉及的文件数量很大,我更愿意在这个级别上解决这个问题

所以,我想要的是如下内容(如果open(file)是可订阅的,那么这将是有效的):

看看:


Edit:从zip改为itertools.izip函数。

open
提供了一个迭代器,因此它不是“可订阅的”,但可以轻松地进行一次升级(使用2.6或更高版本中的
next
内置函数,在较旧的Python版本中使用
.next()
方法——我假设是2.6或更高版本)

f1 = open(file1)
f2 = open(file2)
f2.next()   # Skip the first line of file2 (used to be readline() - thanks, Alex)
for line in zip(f1, f2):
    # do-something
那么你想说的是:

for line in zip(open(file1), open(file2)[1:]):
换言之:

f2 = open(file2)
next(f2)
for line in zip(open(file1), f2):
或者,如果你喜欢一句台词:

import itertools as it
for line in it.izip(open(file1), it.islice(open(f2), 1, None)):

在后一种情况下,由于我正在导入
itertools
,因此我还利用了它的
izip
方法,而不是浪费内存的
zip
内置;-)

风险——它在当前的CPython实现中起作用,但通常混合对文件的迭代和对其他文件方法的调用是脆弱的,并且不能保证,请参见(在当前的CPython实现中,
next
then
readline
breaks,反之亦然,从今天起通常起作用——但是,为什么要在
next(f2)时冒险呢
是“跳过文件的第一行”?!)的一种非常可靠且有保证的方法。+1实际上我使用的是izip:-),但希望使问题更简单。谢谢正如Alex建议的那样,我还建议切换到
itertools.izip
,以节省内存。
f2 = open(file2)
next(f2)
for line in zip(open(file1), f2):
import itertools as it
for line in it.izip(open(file1), it.islice(open(f2), 1, None)):