我正在尝试取一个文本文件,当用户按下任意键时,会打印25行文本文件,然后再次按下该键,然后打印下25行等。
到目前为止,我已经有了这段代码:
f = open("lab6text.txt", "r");
print f
for line in f.readlines():
print line,
但无论我输入的是什么号码:
f.readlines(25):
每行仍然打印。我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
以“块”方式读取文件的更简单方法是使用iter(callable, sentinel)
函数。
def make_lines_reader(fobj, number_of_lines):
def reader():
return ''.join(fobj.readline() for _ in range(number_of_lines))
return reader
with open('the-file.txt') as f:
for chunk in iter(make_lines_reader(f, 25), ''):
print(chunk, end='')
input() #assuming python3, in python2 use raw_input()
这将从the-file.txt
打印25行,然后等待用户按Enter键。之后它将打印其他25行等。
答案 1 :(得分:1)
readlines
不会将行数作为参数。它取而代之的是提示,这是要读入的最大字节数/字符数。除非你知道每行的长度,否则这可能不会很好地满足你的目的。
如果要打印文件的下25行,可以使用列表推导,readline
和join
:
print "".join([ f.readline() for _ in range(25) ])
通过这种方式,您不必一次加载所有文件,而只需加载接下来的25行。
您可以在while
循环中嵌套此(或类似的东西),以便在用户按下某个键时从文件中加载更多行。
答案 2 :(得分:0)
您可以声明一个最多打印25行的函数,并返回是否遇到文件末尾。
def print25lines(f):
for _ in range(25):
line = f.readline()
if line:
print line,
else:
return False
return True
with open('lab6text.txt', 'r') as f:
while print25lines(f):
# Wait user to press enter
raw_input("Press Enter to continue...")