2010-09-18 74 views
0

这是代码,我此刻

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行后停止工作并等待Enter键按下 5)如果按Enter键显示文件的后20行(20-> 40和等等)Python。从文件中的20行片段显示文本中每按一次ENTER

当前问题:循环不重新启动,它只显示前20行然后d停止工作。

回答

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离开循环,所以你只想用它来达到这个目的。 just calling a blocking operation like raw_input`足够,如果你只是因为某种原因需要暂停执行(如等待用户)。

也,continue是完全没有必要的。在循环结束时,它别无选择,只能到continue

你在想什么if q == "": x += 20?首先,它应该是if not q: x += 20(空字符串(如空列表/字符串/元组)计算为False),第二,这将跳过接下来的20行。这是你没有分享的要求吗?

+0

感谢您的回复。你的代码会诀窍 - 程序要求输入文件名,打开它,读取行,然后一次显示20行文件。 – 2010-09-18 08:57:26

+0

我的代码不好,因为我刚开始学习python。 – 2010-09-18 08:58:55

+0

@Mr Wotan。不要担心错误的代码,我的代码仍然可以使用_lot_工作。这是学习过程的一部分。一个好的提示是只做一次你不明白的事情。这样,你可以理解它。因此,只需在循环中添加一个'break'语句__或者一个'continue'语句来查看它们的功能。但不是两者兼而有之,或者你没有办法知道是什么搞砸了。除此之外,你当然想要善于阅读文献。 – aaronasterling 2010-09-18 09:04:16

1

基本上,你想暂停每20行。目前,在前20行之后,你已经打破了你的循环。

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

应该就足够了。

+0

感谢您的快速反应(对格式不好的人抱歉,对此仍然陌生:S)......我将它改为您所说的内容,但现在它只打印一个文件,每次只打印两行文件一些原因。 – 2010-09-18 08:42:54

+1

将'if x%20'更改为'if x%20 == 0' – robert 2010-09-18 11:16:17

+0

@robert好点,谢谢。固定! – 2010-09-18 11:29:39

相关问题