【问题标题】:How do I end the program once the last line of the text is reached?到达文本的最后一行后,如何结束程序?
【发布时间】:2025-12-07 22:35:01
【问题描述】:

我编写此代码的目的是在到达最后一行后退出代码,并且我尝试使用注释代码,但它只打印每个交替行。

try:
a = sys.argv[1]
with open(a, 'r') as f:
    print(f.readline().strip('\n'))
    while True:
        x = input()
        if x == '':
            print(f.readline().strip('\n'))
            # if not f.readline():
              # exit()
            continue
        if x == 'q':
            exit()

except OSError:
  print("Error: Cannot open specified file.")
  exit()
except IndexError:
  print('Usage: python3 less.py <filename>')
  exit()

【问题讨论】:

  • 一个简单的for line in f: 将遍历这些行。

标签: python file exit readline


【解决方案1】:

TL;DR

while True:
    x = input()
    if x == '':
        line = f.readline()
        print(line.strip('\n'))
        if line == '':
          exit()
        continue
    if x == 'q':
        exit()

Python 中的readline() 方法会一直读取next 行,所以当你多次调用它时,它会不断地读取另一行。由于对于 while 循环的每次迭代,您都会调用该函数两次,因此您实际上忽略了第一行并检查了第二行。通过将f.readline() 的输出保存到一个变量中,您不会每回合多次调用该函数,因此不会跳过任何行。查看here 了解有关 Python 文件操作的更多信息。

【讨论】:

  • 感谢您的帮助!还有一个问题,如何防止程序打印最后一个空行?
  • 没问题,你只需交换print()if 语句的顺序。也就是说,确保在打印出来之前检查空白字符串
  • 请注意,exit() 不应在程序中使用。请改用sys.exit()。另请参阅 thisthis SO 问题。
【解决方案2】:

是的,cpchristensen 是对的。我想补充一点,我相信有一个StopIteration 异常,一旦它到达EOF 就会执行。因此,一旦异常触发,您可以执行以下操作来退出脚本:

with open(sys.argv[1]) as lines:
    try:
        while True:              
            cur_line = next(lines)
            # ... do something with current line
    except StopIteration:
        exit()

【讨论】:

    最近更新 更多