对于范围迭代
For range iteration
我正在尝试从文本文件中迭代一定数量的行。我已经尝试通过使用 i += 1
和 for
循环的不同组合来这样做,但它似乎只是打印出文本文件中的所有行。
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
中以妥善处理文件包含少于指定行数的情况。
我正在尝试从文本文件中迭代一定数量的行。我已经尝试通过使用 i += 1
和 for
循环的不同组合来这样做,但它似乎只是打印出文本文件中的所有行。
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
中以妥善处理文件包含少于指定行数的情况。