对于范围迭代

时间:2015-02-03 11:07:21

标签: python python-3.x

我试图从文本文件中迭代一定数量的行。我尝试使用i += 1for循环的不同组合,但它似乎打印出文本文件中的所有行。

def showEntries(amount):
    print("---------- SUBSCRIPTIONS ----------\n")
    with open('lib/names.txt','r') as names:
        for line in names:
            for x in range(0,2):
                print(line)
    print("----------  END OF LIST  ----------")

4 个答案:

答案 0 :(得分:3)

您可以使用itertools.islice()

from itertools import islice

def showEntries(filename, amount):

    with open(filename,'r') as names:
        for line in islice(names, amount):
            print(line)

答案 1 :(得分:2)

我想你想要这样的东西:

for line_no, line in enumerate(names):
    if line_no >= amount:  # if we've seen enough already
        break  # stop looping
    print(line)  # otherwise show the current line

例如:

>>> names = ["John Cleese", "Graham Chapman", "Terry Gilliam", "Eric Idle", "Terry Jones", "Michael Palin"]
>>> for index, name in enumerate(names):
    if index >= 3:
        break
    print(name)


John Cleese
Graham Chapman
Terry Gilliam

有关详细信息,请参阅the docs on enumerate

答案 2 :(得分:0)

我相信这就是你想要做的......

一个。获取用户输入的电子邮件地址并将其添加到文件中。暂且不说......在将其写入文件之前,您可能需要执行以下操作...   - 确保电子邮件地址是有效地址(使用正则表达式强制执行此操作)   - 确保电子邮件地址不存在(您不希望文件中包含重复的地址) 等...

和, 湾打印出订阅者列表中指定数量的结果的打印方式。你需要把你的

这是一个快速示例,说明如何从中读取x行数。我已经使用了很多语法糖......你可以选择不使用..

def printLines(numlines):
    i = 0
    with open(file) as f:
        for line in f:
            if i < numlines:
                print line
                i += 1
            else:
                break

答案 3 :(得分:0)

您的代码非常接近 - 您只需要让行数的迭代控制循环,而不是文件中的数量:

def showEntries(amount):
    print("---------- SUBSCRIPTIONS ----------\n")
    with open('lib/names.txt', 'r') as names:
        for _ in range(amount):
            print(next(file).rstrip())
    print("----------  END OF LIST  ----------")

为了更加健壮,循环的内部部分可能应该包含在try/except中,以处理文件包含少于指定行数的情况。