Как мне завершить программу, когда будет достигнута последняя строка текста? - PullRequest
1 голос
/ 20 апреля 2020

Я написал этот код с целью выхода из кода после достижения последней строки, и я попытался использовать закомментированный код, но он печатает только каждую чередующуюся строку.

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()

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Да, 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()
1 голос
/ 20 апреля 2020

TL; DR

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

Метод readline() в Python всегда будет читать строку next , поэтому при ее вызове несколько раз , он будет постоянно читать другую строку. Поскольку для каждой итерации вашего while l oop, вы вызываете функцию дважды, вы фактически игнорируете первую строку и проверяете вторую строку. Сохраняя вывод f.readline() в переменную, вы не вызываете функцию более одного раза за ход и, следовательно, не пропустите ни одной строки. Проверьте здесь для получения дополнительной информации о Python файловых операциях.

...