file.readline
При считывании символ новой строки \n присутствует в конце каждой из строк. Его может не быть лишь в последней строке — это позволяет добиться однозначности: если метод возвращает пустую строку, значит достигнут конец файла; если строка содержит лишь символ \n , значит это просто очередная строка.
with open('my_file.txt') as f:
f.readline() # 'The first line.\n'
f.readline() # '\n'
f.readline() # 'The last line.\n'
f.readline() # ''
Для упрощения можно считывать строки из файла пройдя по его объекту в цикле:
with open('my_file.txt') as f:
for line in f:
print(line)
Такой подход эффективен с точки зрения расходования памяти, быстр, и выглядит хорошо.
- Для считывания файла кусками используйте read().
- Для считывания всех строк разом используйте readlines().
Чтение из файла на Python
30 мая 2013 г.
Archy
Python для начинающих
5

Создавая логирование действии, сохраняя из интернета изображения, читая построчно из файла и многие другие действия которые требуют от нас запись, сохранения и чтение, в Python выполняется весьма просто и быстро. В случае сохранения данных в файл, папка в которой находится файл должна иметь права 777. Следующая программа открывает файл и читает его содержимое построчно:
# -*- coding: utf-8 -*- f = open('power.txt') line = f.readline() while line: print (line), line = f.readline() f.close()
Функция open() возвращает новый файловой объект. Вызывая методы этого объекта можно выполнять разные действия над файлом, такие как чтение и запись. Метод readline() который мы использовали в примере выше, читает одну строку из файла, завершая символом перевода строки. Используя данный метод, для чтения файла нам понадобится цикл while, и в теле цикла вызывать readline() чтобы читать следующею строку. После чтения всего файла, метод возвращает пустую строку т.е. False, вот тогда цикл while и завершает свою работу.
Можно читать из файла построчно не используя при этом цикл while, данный способ более прост и читабельней.
# -*- coding: utf-8 -*- f = open('power.txt') for line in f.readlines(): print (line),
Метод readline s () отличается одной добавленной буквой и строит обратить внимание на это, часто ошибаются и используют readline() и не понимают почему выдают всего лишь одну строку. readline() и readlines() выполняют одну и ту же операцию — читаю построчно данные из файла, но возвращают разные данные. readlines() возвращает список в котором содержится строки из файла.
Метод file.readline() в Python, читает файл построчно
Метод файла file.readline() читает одну целую строку из файла. Конечный символ новой строки \n сохраняется в строке. Метод возвращает одну строку или байтовый объект в зависимости от режима, в котором открыт файл функцией open() .
Если необязательный аргумент size присутствует и неотрицателен, то метод читает строку частями по size байтов, пока не достигнет символ новой строки \n . Если size отрицателен, то считывается строка полностью.
Пустая строка возвращается только тогда, когда достигнут конец файла, т. е. EOF встречается немедленно.
- Прочитать файл кусками можно с помощью метода file.read() .
- Создать список строк из файла file.readlines() .
Примеры построчного чтения файла.
- Общий случай использования;
- Чтение файла при помощи цикла for ;
- Чтение строк файла кусками.
Общий случай использования метода файла 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 "", line 1, in # 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()
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Метод file.close(), закрывает файл
- Метод file.flush(), очищает буфер чтения
- Метод file.fileno(), получает файловый дескриптор
- Метод file.isatty(), проверяет связь с терминалом
- Метод file.read(), читает весь файл или кусками
- Метод file.readline(), читает файл построчно
- Метод file.readlines(), получает список строк файла
- Метод file.seek(), перемещает указатель в файле
- Метод file.tell(), позиция указателя в файле
- Метод file.truncate(), усекает размер файла
- Метод file.write(), пишет данные в файл
- Метод file.writelines(), пишет список строк в файл
Д. П. Кириенко. Программирование на языке Python (школа 179 г. Москвы)
Для каждого файла, с которым необходимо производить операции ввода-вывода, нужно связать специальный объект — поток. Открытие файла осуществляется функцией open , которой нужно передать два параметра. Первый параметр (можно также использовать именованный параметр file ) имеет значение типа str , в котором записано имя открываемого файла. Второй параметр (можно также использовать именованный параметр mode ) —это значение типа str , которое равно «r» , если файл открывается для чтения данных (read), «w» , если на запись (write), при этом содержимое файла очищается, и «a» — для добавления данных в конец файла (append). Если второй параметр не задан, то считается, что файл открывается в режиме чтения.
Функция open возвращает ссылку на файловый объект, которую нужно записать в переменную, чтобы потом через данный объект использовать методы ввода-вывода. Например:
input = open('input.txt', 'r') output = open('output.txt', 'w')
Чтение данных из файла
Для файла, открытого на чтение данных, можно вызывать следующие методы, позволяющие читать данные из файла.
Метод readline() считывает одну строку из файла (до символа конца строки ‘\n’ , возвращается считанная строка вместе с символом ‘\n’ . Если считывание не было успешно (достигнут конец файла), то возвращается пустая строка. Для удаления символа ‘\n’ из конца файла удобно использовать метод строки rstrip() . Например: s = s.rstrip() .
Метод readlines() считывает все строки из файла и возвращает список из всех считанных строк (одна строка — один элемент списка). При этом символы ‘\n’ остаются в концах строк.
Метод read() считывает все содержимое из файла и возвращает строку, которая может содержать символы ‘\n’ . Если методу read передать целочисленный параметр, то будет считано не более заданного количества символов. Например, считывать файл побайтовопосимвольно можно при помощи метода read(1) .
Вывод данных в файл
Данные выводятся в файл при помощи метода write , которому в качестве параметра передается одна строка. Этот метод не выводит символ конца строки ‘\n’ (как это делает функция print при стандартном выводе), поэтому для перехода на новую строку в файле необходимо явно вывести символ ‘\n’ .
Также можно выводить данные в файл при помощи функции print , если передать ей еще один именованный параметр file , равный ссылке на открытый файл. Например:
output = open('output.txt', 'w') print(a, b, c, file=output)
Закрытие файла
После окончания работы с файлом необходимо закрыть его при помощи метода close() .
Пример
Следующая программа считывает все содержимое файла input.txt , записывает его в переменную s , а затем выводит ее в файл output.txt .
input = open('input.txt', 'r') output = open('output.txt', 'w') s = input.read() output.write(s) input.close() output.close()
А вот аналогичная программа, но читающая данные посимвольно:
input = open('input.txt', 'r') output = open('output.txt', 'w') c = input.read(1) while len(c) > 0: output.write(c) c = input.read(1) input.close() output.close()
