Python. 每按一次ENTER显示文件中的20行文本分片
这是我目前的代码
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
语句来打开文件。这比用 open
和 close
要好得多,因为它能保证文件总是会被关闭。
在你发的代码中,当你执行 break
时,你实际上是退出了循环。break
是用来离开循环的,所以只在需要的时候使用它就行了。如果你只是想暂停执行,比如等用户输入,直接调用一个阻塞操作,比如 raw_input
就可以了。
另外,continue
是完全不必要的。在循环的末尾,代码自然会继续执行。
你在写 if q == "": x += 20
的时候是怎么想的?首先,这应该写成 if not q: x += 20
(空字符串(就像空列表、字典、元组)会被认为是 False
),其次,这样会跳过接下来的20行。这是你没有提到的要求吗?