Python. 每按一次ENTER显示文件中的20行文本分片

0 投票
2 回答
1206 浏览
提问于 2025-04-16 04:18

这是我目前的代码

print "Please input the filename:"
n = raw_input()
f = open(n,"r")
x = 0
for line in f.readlines():
    print line
    x+=1
    if x % 20 == 0:
        break
        q = raw_input()
        if q == "":
            x+= 20
        continue

这个程序应该完成的事情: 1) 询问用户输入一个文件名 2) 读取这个文件 3) 打印出文件的前20行 4) 在打印完前20行后停止工作,等待用户按下回车键 5) 如果按下了回车键,就显示接下来的20行(从20到40,以此类推)

目前的问题是:循环没有重新开始,它只显示了前20行,然后就停止了。

2 个回答

1

简单来说,你想要每20行暂停一下。现在,你的代码在处理完前20行后就停止了循环。

for line in f:
    print line
    x += 1
    if x % 20 == 0:
        raw_input("Hit enter")

这样就可以了。

0
filename = raw_input("Please enter the file name: ")
with open(filename) as f:
    lines = f.readlines()
    for i in xrange(0, len(lines), 20):
        print lines[i:i+20]
        raw_input("Press Enter for more")

这段代码会把整个文件读入内存,所以如果文件很大,你可能不想用切片。不过,如果文件真的很大,你也不太可能想要每次只处理二十行;)

主要的变化是我们使用了 with 语句来打开文件。这比用 openclose 要好得多,因为它能保证文件总是会被关闭。

在你发的代码中,当你执行 break 时,你实际上是退出了循环。break 是用来离开循环的,所以只在需要的时候使用它就行了。如果你只是想暂停执行,比如等用户输入,直接调用一个阻塞操作,比如 raw_input 就可以了。

另外,continue 是完全不必要的。在循环的末尾,代码自然会继续执行。

你在写 if q == "": x += 20 的时候是怎么想的?首先,这应该写成 if not q: x += 20(空字符串(就像空列表、字典、元组)会被认为是 False),其次,这样会跳过接下来的20行。这是你没有提到的要求吗?

撰写回答