对于范围迭代

For range iteration

我正在尝试从文本文件中迭代一定数量的行。我已经尝试通过使用 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  ----------")

我想你想要这样的东西:

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

您可以为此使用 itertools.islice()

from itertools import islice

def showEntries(filename, amount):

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

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

一个。获取用户输入的电子邮件地址并将其添加到文件中。顺便说一句......你可能想在将其写入文件之前执行以下操作...... - 确保电子邮件地址是有效地址(使用正则表达式强制执行此操作) - 确保电子邮件地址不存在(你不想要一个充满重复地址的文件) 等...

并且, b.从您的订阅者列表中打印出指定数量的结果。您需要将

这是一个简单的示例,说明您可以如何从中读取 x 行。我使用了很多语法糖..你可以选择不使用..

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

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

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 中以妥善处理文件包含少于指定行数的情况。