在zip中跳过一个元素
我有两个文件,它们被压缩成了一个文件,类似于下面这样:
for line in zip(open(file1), open(file2)):
# do-something
不幸的是,现在第二个文件发生了变化,开头多了一行。是的,我可以手动去掉那一行(或者用一个额外的脚本/程序),但因为涉及的文件数量非常多,我更希望在这个层面上解决问题。
所以,我想要的东西类似于下面这个(如果open(file)可以像列表那样使用的话,这样是有效的):
for line in zip(open(file1), open(file2)[1:]):
# do-something
3 个回答
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
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
4
open
函数会给你一个迭代器,所以它不能像列表那样通过下标来访问,但你可以很容易地让它向前移动一步(在 Python 2.6 或更高版本中可以用 next
这个内置函数,旧版本则用 .next()
方法——这里假设你用的是 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
内置函数;-)。
2
看看这个itertools库:
for line in itertools.izip(
open(file1),
itertools.islice(open(file2), 1, None)
):
# do something
补充:把原来的zip函数改成了itertools.izip函数。