file.readline([size])
file
- объект файлаsize
- int
, количество байт.Метод файла file.readline()
читает одну целую строку из файла. Конечный символ новой строки \n
сохраняется в строке. Метод возвращает одну строку или байтовый объект в зависимости от режима, в котором открыт файл функцией open()
.
Если необязательный аргумент size
присутствует и неотрицателен, то метод читает строку частями по size
байтов, пока не достигнет символ новой строки \n
. Если size
отрицателен, то считывается строка полностью.
Пустая строка возвращается только тогда, когда достигнут конец файла, т. е. EOF
встречается немедленно.
file.read()
.file.readlines()
.file.readline()
.# подготовим файл 'foo.txt' >>> text = 'This is 1st line\nThis is 2nd line\nThis is 3rd line\n' >>> fp = open('foo.txt', 'w+') # запишем текст в файл 'foo.txt' >>> fp.write(text) # 51 # указатель в начало файла >>> fp.seek(0) # 0 # начинаем читать построчно >>> fp.readline() # 'This is 1st line\n' >>> fp.readline() # 'This is 2nd line\n' >>> fp.readline() # 'This is 3rd line\n' >>> fp.readline() # '' >>> fp.close()
for
.Так как операция открытия файла open()
возвращает поток, представляющий из себя генератор строк из файла, то можно итерироваться по нему при помощи функции next()
.
>>> fp = open('foo.txt', 'r') >>> next(fp) # 'This is 1st line\n' >>> next(fp) # 'This is 2nd line\n' >>> next(fp) # 'This is 3rd line\n' >>> next(fp) # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # StopIteration >>> fp.close()
Так как цикл for/in
делает то же самое, а именно при прохождении по последовательности вызывает next
, следовательно, более просто, читать файл построчно, без ущерба для оперативной памяти можно следующим образом.
Внимание! Функцию open()
предпочтительнее использовать с оператором контекстного менеджера with
. При использовании оператора with
файл закрывать не нужно:
>>> with open('foo.txt', 'r') as fp: ... for n, line in enumerate(fp, 1): ... # Обработка строки 'line' ... line = line.rstrip('\n') ... print(f"Вывод строки: {n}) - {line}") ... # Вывод строки: 1) - This is 1st line # Вывод строки: 2) - This is 2nd line # Вывод строки: 3) - This is 3rd line
while
.Возможно возникнет вопрос, зачем тогда вообще нужен метод файла file.readline()
, если все так просто. Ответы просты. А если необходимо прочитать только одну строку? А если строка файла (до разделителя строки \n
) очень длинная и не умещается в оперативной памяти, то тогда приходит на помощь метод файла file.readline()
, т.к. он умеет разбивать строку файла на куски.
>>> fp = open('foo.txt', 'r') # будем читать строку по 10 байт >>> line = fp.readline(10) >>> while line: ... line = line.rstrip('\n') ... print(line) ... line = fp.readline(10) ... # This is 1s # t line # This is 2n # d line # This is 3r # d line >>> fp.close()