3

例如,我需要通过调用readline10 次来读取文件。

with open("input") as input_file:
    for i in range(10):
        line = input_file.readline()
        # Process the line here

这是一种非常常用的技术,用于range控制循环数。唯一的缺点是:有一个未使用的i变量。

这是我能从 Python 中得到的最好的吗?有更好的想法吗?

PS 在 Ruby 中,我们可以这样做:

3.times do
  puts "This will be printed 3 times"
end

这是优雅的,并且非常清楚地表达了意图。

4

4 回答 4

10

这几乎是循环某个特定次数的最佳选择。

一个常见的习惯用法是做for _ in ...代替,将 表示_为一种占位符。

于 2013-10-16T05:25:00.760 回答
5

使用isliceitertools

from itertools import islice
with open("input", 'r') as input_file:
    for line in islice(input_file, 10):
        #process line

由于您可以直接遍历文件行,因此无需调用input_file.readline() 查看itertools.islice的文档

于 2013-10-16T05:36:55.203 回答
1

python中没有等效的构造。

(顺便说一句,即使在 Ruby 示例中,仍然需要计数器!该语言只是将它隐藏起来。解释器也可能生成字节码,其中这些行重复多次,而不是循环,但是不太可能。)

于 2013-10-16T05:27:04.123 回答
0

您已经提供的解决方案几乎是最好的解决方案。

但是,如果您真的想要,您可以使用生成器和iterslice将其抽象出来,这样您就不需要看到未使用的变量:

import itertools

def take(iterable, amount):
    return itertools.islice(iterable, 0, amount)

with open("inputfile.txt") as file:
    for line in take(file.readlines(), 3):
        print line
于 2013-10-16T05:30:54.663 回答