Зависимость .readline от типа цикла
Почему в зависимости от типа цикла метод .readline выдает разные результаты? В первом случае запускаю цикл:
testfile = open('Тест.txt','r')
for i in testfile:
i = testfile.readline()
print(i, end="")
testfile.close()
Получаю результат: 2w 4w 6w 8w
Во втором цикле:
testfile = open('Тест.txt','r')
i = testfile.readline()
while i:
i = testfile.readline()
print(i, end="")
testfile.close()
получаю результат:
2w 3q 4w 5q 6w 7q 8w 9q
При этом проигнорирована первая строка - 1q
Файл Тест.txt:
1q 2w 3q 4w 5q 6w 7q 8w 9q
Ответы (1 шт):
При использовании цикла for
:
testfile = open('Тест.txt', 'r')
for stroka in testfile:
stroka = testfile.readline()
print(stroka, end="")
testfile.close()
Что происходит:
В этом цикле вы итерируете по объекту файла testfile
. Каждый раз, когда происходит итерация, Python
автоматически вызывает testfile.readline()
, чтобы получить следующую строку.
Однако внутри цикла вы снова вызываете testfile.readline()
, что приводит к тому, что вы пропускаете каждую вторую строку файла. Таким образом, вы получаете только строки с четными номерами (2w, 4w, 6w, 8w)
При использовании цикла while
:
testfile = open('Тест.txt', 'r')
stroka = testfile.readline()
while stroka:
stroka = testfile.readline()
print(stroka, end="")
testfile.close()
Что происходит:
В этом цикле вы сначала считываете первую строку файла с помощью stroka = testfile.readline()
.
Затем, в условии цикла while, вы снова считываете строку перед тем, как ее напечатать. В результате вы печатаете строки, начиная со второй (3q, 4w, 5q и так далее)
.
Таким образом, вы пропускаете первую строку и печатаете все последующие.
Решение проблемы:
С циклом for
:
testfile = open('Тест.txt', 'r')
for stroka in testfile:
print(stroka, end="")
testfile.close()
С циклом while
:
testfile = open('Тест.txt', 'r')
stroka = testfile.readline()
while stroka:
print(stroka, end="")
stroka = testfile.readline()
testfile.close()