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