打印文本文件的前 25 行,然后打印接下来的 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()

这将从the-file.txt打印 25 行,然后等待用户按 Enter 键。之后,它将打印其他 25 行等。

readlines

将行数作为参数。相反,它需要一个提示,即要读入的最大字节数/字符数。除非您知道每行的长度,否则这可能无法很好地满足您的目的。

如果要打印文件的接下来 25 行,可以使用列表推导式、readlinejoin

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...")

最新更新