跳过zip中的元素

时间:2009-12-08 22:34:44

标签: python

我有两个文件zipped,其中包含以下内容:

for line in zip(open(file1), open(file2)):
    # do-something

不幸的是,现在file2已经改变,并且在开头还有一行。是的,我可以手动(或使用额外的脚本/程序)摆脱它,但由于涉及的文件的实际数量很大,我宁愿在这个级别解决问题。

所以,我想要的是以下内容(如果打开(文件)是可订阅的,那将是有效的):

for line in zip(open(file1), open(file2)[1:]):
    # do-something

3 个答案:

答案 0 :(得分:4)

open为你提供了一个迭代器,所以它不是“可订阅的”,但它可以轻松推进一个(内置next内置2.6或更高版本,.next()方法更早Python版本 - 我假设2.6或更高版本。)

所以你想说的是:

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内置;-)

答案 1 :(得分:2)

看看itertools

for line in itertools.izip(
    open(file1),
    itertools.islice(open(file2), 1, None)
    ):
    # do something

编辑:已从zip更改为itertools.izip函数。

答案 2 :(得分:1)

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