我正在尝试获取一个文本文件,当用户按下任何键时,将打印文本文件的 25 行,然后当再次按下该键时,将打印接下来的 25 行,依此类推。
到目前为止,我有这个代码:
f = open("lab6text.txt", "r");
print f
for line in f.readlines():
print line,
但无论我输入什么数字:
f.readlines(25):
仍然打印每一行。我怎样才能解决这个问题?
谢谢!
我正在尝试获取一个文本文件,当用户按下任何键时,将打印文本文件的 25 行,然后当再次按下该键时,将打印接下来的 25 行,依此类推。
到目前为止,我有这个代码:
f = open("lab6text.txt", "r");
print f
for line in f.readlines():
print line,
但无论我输入什么数字:
f.readlines(25):
仍然打印每一行。我怎样才能解决这个问题?
谢谢!
读取“块”中文件的更简单方法是使用该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()
这将打印 25 行,the-file.txt
然后等待用户按 Enter。之后它将打印其他 25 行等。
readlines
不将行数作为参数。相反,它需要一个提示,这是要读入的最大字节数/字符数。除非您知道每行的长度,否则这可能无法很好地满足您的目的。
如果要打印文件的下 25 行,可以使用列表推导式readline
、 和join
:
print "".join([ f.readline() for _ in range(25) ])
通过这种方式,您不必一次加载所有文件,而只需加载接下来的 25 行。
您可以将这个(或类似的东西)嵌套在一个while
循环中,以便在用户按下某个键时从文件中加载更多行。
您可以声明一个最多打印 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...")