Python Понимание, почему пропускаются строки - PullRequest
2 голосов
/ 28 апреля 2020

Я пытаюсь читать построчно из входного файла в Python, как показано ниже.

in1 = open("input.txt", "r")

for i in in1:
  a1 = in1.readline()
  print(a1)

in1.close()

Входной файл содержит числа, как показано ниже:

13245
546464
46516
684186

По какой-то причине он печатает только каждую вторую строку с новой строкой между ними, но я не понимаю, почему.

546464

684186

Я бы ожидал, что a1 изначально сохранит «13245 \ n», затем «546464 \ n» на следующей итерации и так далее до «684186 \ n». Если я использую readlines () вместо readline (), он пропускает исходное число, сохраняя оставшиеся с «\ n» в списке.

['546464\n', '46516\n', '684186']

Почему это так? Связано ли это с символом новой строки "\ n", который читается? Я знаю, что есть другие способы чтения файлов построчно, но я хочу понять, почему это не работает так, как ожидалось, когда это происходит в других языках (C ++, Java), использующих подобную структуру. Речь идет не о поиске кода для этого, а о том, почему этот код ведет себя так, как он делает.

Ответы [ 2 ]

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

Попробуйте:

in1 = open("input.txt", "r")

for i in in1:
  print(i)

in1.close()

Для l oop уже выполняется readline, следовательно, вы делаете это дважды за шаг.

0 голосов
/ 28 апреля 2020

Проблема в том, что вы дважды перебираете файл - в вашем for l oop и используете readline. Таким образом, вы будете печатать каждую вторую строку в вашем файле.

Вы можете использовать только for l oop:

in1 = open("input.txt", "r")
for a1 in in1:
  print(a1)
in1.close()

или использовать readlines() для чтения всех строк как перечислите и переберите их:

in1 = open("input.txt", "r")
for a1 in in1.readlines():
  print(a1)
in1.close()
...