打印文本文件的前25行,接下来打25等

时间:2013-11-03 16:29:26

标签: python python-2.7

我正在尝试取一个文本文件,当用户按下任意键时,会打印25行文本文件,然后再次按下该键,然后打印下25行等。

到目前为止,我已经有了这段代码:

f = open("lab6text.txt", "r");
print f

for line in f.readlines():
   print line,

但无论我输入的是什么号码:

f.readlines(25):

每行仍然打印。我该如何解决这个问题?

谢谢!

3 个答案:

答案 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行,可以使用列表推导,readlinejoin

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