1

所以我认为这应该是一件很容易的事情。假设我有一个这样的文本文件。

football
baseball
basketball
soccer

和一个像这样的列表,例如

colors=["orange","white"]

我了解如何在 python 中一起迭代它们

for i,j in zip(file, colors)

但是有没有一种简单的方法可以告诉文件从第 3 行开始,这样如果打印出来我会得到

basketball orange
soccer white

我了解如何使用 2 个列表执行此操作,但我不确定如何告诉文件从更远的位置开始。一如既往地感谢,我还是新来的,每个人都是很大的帮助!

4

5 回答 5

2

我会做

next(file) # get and discard
next(file)
for i,j in zip(file, colors):
    # do stuff

然后是zip操作。

如果您有超过 2 个或可变数字:

for _ in range(number_to_skip):
    next(file)
for i, j in zip(file, colors):
    # do stuff

这是有效的,因为文件不仅是可迭代的,而且它自己的迭代器也是如此。所以它自己给出它的值,而不是使用不同的迭代器对象(就像list等人所做的那样)。

每个next(file)人都从文件中获取一行并继续前进。如果你达到了“真正的”迭代,你就在你想去的地方。

于 2012-12-04T05:48:07.393 回答
2

可以使用 itertools 实现一种无需将文件转换为列表并将其保持在可迭代状态的方法:

import itertools

for i, j in itertools.izip(itertools.islice(file, 2, None), colors)

islice跳过 2 行而不将文件转换为列表并将其保持在可迭代状态。

izip也很重要,因为zip也可能将事物转换为列表,而不是让它们保持可迭代。

于 2012-12-04T05:54:20.993 回答
1

阅读 2 行并且不执行任何操作

file.readline()
file.readline()

然后使用普通拉链

for i,j in zip(file, colors):
    # perform action
于 2012-12-04T05:50:02.680 回答
0

你可以做for i,j in zip(file[2:],colors)

于 2012-12-04T05:47:11.747 回答
0

如果它适合,只需使用 readlines 来获取行列表..

lines = my_file.readlines()
zip(colors,lines[3:])
于 2012-12-04T05:47:17.927 回答