Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 到达文本的最后一行后,如何结束程序?_Python_File_Exit_Readline - Fatal编程技术网

Python 到达文本的最后一行后,如何结束程序?

Python 到达文本的最后一行后,如何结束程序?,python,file,exit,readline,Python,File,Exit,Readline,我写这段代码的目的是在到达最后一行时退出代码,我尝试使用注释代码,但它只打印每一行 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.read

我写这段代码的目的是在到达最后一行时退出代码,我尝试使用注释代码,但它只打印每一行

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()
试试看:
a=sys.argv[1]
以开放式(a,'r')作为f:
打印(f.readline().strip('\n'))
尽管如此:
x=输入()
如果x='':
打印(f.readline().strip('\n'))
#如果不是f.readline():
#退出()
持续
如果x=='q':
退出()
除操作错误外:
打印(“错误:无法打开指定的文件。”)
退出()
除索引器外:
打印('用法:python3 less.py')
退出()
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()
方法将始终读取下一行,因此当您多次调用它时,它将继续读取另一行。因为对于while循环的每一次迭代,调用函数两次,实际上忽略了第一行并检查了第二行。通过将
f.readline()
的输出保存到一个变量中,您每次调用函数的次数不会超过一次,因此不会跳过任何行。查看Python文件操作的更多信息。

是的,没错。我想补充一点,我相信有一个
StopIteration
异常,一旦到达EOF就会执行。因此,您可以在异常触发后执行类似操作以退出脚本:

以open(sys.argv[1])作为行的
:
尝试:
尽管如此:
当前行=下一行(行)
# ... 用当前线路做些什么
除停止迭代外:
退出()

谢谢您的帮助!还有一个问题,如何防止程序打印最后一个空行?没问题,您只需交换
print()
if
语句的顺序即可。也就是说,确保在打印出来之前检查空白字符串。在F::/COD>中的一个简单的<代码>将重复行。