0

我正在尝试获取一个文本文件,当用户按下任何键时,将打印文本文件的 25 行,然后当再次按下该键时,将打印接下来的 25 行,依此类推。

到目前为止,我有这个代码:

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

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

但无论我输入什么数字:

f.readlines(25):

仍然打印每一行。我怎样才能解决这个问题?

谢谢!

4

3 回答 3

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()

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

于 2013-11-03T16:44:42.317 回答
1

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

如果要打印文件的下 25 行,可以使用列表推导式readline、 和join

print "".join([ f.readline() for _ in range(25) ])

通过这种方式,您不必一次加载所有文件,而只需加载接下来的 25 行。

您可以将这个(或类似的东西)嵌套在一个while循环中,以便在用户按下某个键时从文件中加载更多行。

于 2013-11-03T16:36:06.653 回答
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...")
于 2013-11-03T17:05:55.763 回答