- Введение в Python
- Поиск
- Новое на сайте
- Работа с файлами в Python
- Открытие и закрытие файла в Python.
- Список режимов доступа к файлу в Python.
- Атрибуты файлового объекта в Python.
- Закрытие файла в Python. Метод close().
- Чтение и запись файлов в Python
- Запись в файл в Python. Метод write().
- Чтение из файла в Python. Метод read().
- Как узнать позицию указателя в файле в Python.
- Добавление в файл. Метод write()
- Расширенная работа с файлами в Python.
- Приложение-пример работы с файлами в Python.
- Функция open() в Python, открывает файл на чтение/запись.
- Открывает файл для чтения или записи файлового потока.
- Синтаксис:
- Параметры:
- Возвращаемое значение:
- Описание:
- Примеры чтения из файла и записи в файл.
Введение в Python
Поиск
Новое на сайте
Работа с файлами в Python
До теперь мы работали только с объектами, сохраненными в оперативной памяти компьютера. То есть после завершения работы программы все наши действия удалялись. Сегодня мы научимся работать с файлами в Python, то есть сохранять состояние программы в файле на жестком диске.
Открытие и закрытие файла в Python.
Перед тем как прочесть и записать что-либо в файл, его следует открыть. Чтобы открыть файл в Python используется встроенная функция open(). При вызове, эта функция создает объект типа файл, с которым в дальнейшем можно работать.
Синтаксис функции open() в Python.
my_file = open(имя_файла [, режим_доступа][, буферизация])
имя_файла: строка, содержащая имя файла с расширением. Например, «my_file.txt».
режим_доступа: строка, которой мы указываем для чего открывается файл: для чтения, записи, добавления информации, и т.д. Например, «w». По умолчанию файл открывается для чтения — «r».
буферизация: Целое число. Если значение аргумента указано 0 — файл открывается без буферизации, 1 с построчной буферизацией, больше одного процесс буферизации выполняется с указанным размером буфера. Отрицательное число — разер буфера будет равен системному.
Список режимов доступа к файлу в Python.
r | Открывает файл только для чтения. Указатель стоит в начале файла. |
rb | Открывает файл для чтения в двоичном формате. Указатель стоит в начале файла. |
r+ | Открывает файл для чтения и записи. Указатель стоит в начале файла. |
rb+ | Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла. |
w | Открывает файл только для записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует. |
wb | Открывает файл для записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует. |
w+ | Открывает файл для чтения и записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует. |
wb+ | Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует. |
a | Открывает файл для добавления информации в файл. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует. |
ab | Открывает файл для добавления в двоичном формате. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует. |
a+ | Открывает файл для добавления и чтения. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует. |
ab+ | Открывает файл для добавления и чтения в двоичном формате. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует. |
Атрибуты файлового объекта в Python.
Как только файл был открыт и у вас появился файловый объект, вы можете получить следующую информацию о нем:
file.closed | Возвращает True если файл был закрыт. |
file.mode | Возвращает режим доступа, с которым был открыт файл. |
file.name | Возвращает имя файла. |
file.softspace | Возвращает False если при выводе содержимого файла следует отдельно добавлять пробел. |
Закрытие файла в Python. Метод close().
Метод файлового объекта close() автоматически закрывает файл, при этом теряется любая несохраненная информация. Работать с файлом (читать, записывать) после этого нельзя.
Python автоматически закрывает файл если файловый объект к которому он привязан присваивается другому файлу. Однако, хорошей практикой будет вручную закрывать файл командой close().
Чтение и запись файлов в Python
Для файлового объекта доступен целый набор методов, чтобы облегчить нашу работу с файлом.
Запись в файл в Python. Метод write().
Метод write() записывает любую строку в открытый файл. Важно помнить, что строки в Python могут содержать двоичные данные, а не только текст.
Метод write() не добавляет символ переноса строки (‘\n’) в конец файла.
Синтаксис метода write().
Вышеприведенный код создаст файл some.txt и запишет в него указанную строку.
Чтение из файла в Python. Метод read().
Метод read() читает строку из открытого файла.
Синтаксис метода read().
Необязательный параметр count — это количество байт, которые следует прочитать из открытого файла. Этот метод читает информацию с начала файла и, если параметр count не указан, до конца файла.
Например, прочтем созданный нами файл some.txt:
Как узнать позицию указателя в файле в Python.
После того как вы вызвали метод read() на файловом объекте, если вы повторно вызовете read(), то увидите лишь пустую строку. Это происходит потому, что после первого прочтения указатель находится в конце файла. Для того чтобы узнать позицию указателя можно использовать метод tell().
Говоря проще, метод tell() сообщает в скольких байтах от начала файла мы сейчас находимся.
Чтобы перейти на нужную нам позицию, следует использовать другой метод — seek().
Синтаксис метода seek().
Аргумент offset указывает на сколько байт перейти. опциональный аргумент from означает позицию, с которой начинается движение. 0 — означает начало файла, 1 нынешняя позиция, 2 — конец файла.
The seek(offset[, from]) method changes the current file position. The offset argument indicates the number of bytes to be moved. The from argument specifies the reference position from where the bytes are to be moved.
Добавление в файл. Метод write()
Если вы хотите не перезаписать файл полностью (что делает метод write в случае открытия файла в режиме ‘w’), а только добавить какой-либо текст, то файл следует открывать в режиме ‘a’ — appending. После чего использовать все тот же метод write.
Расширенная работа с файлами в Python.
Для доступа к более широкому функционалу в работе с файлами в Python, как то удаление файлов, создание директорий и т.д. Следует подключить библиотеку os. Скоро выйдут статьи с примерами.
Приложение-пример работы с файлами в Python.
В качестве приложения примера мы напишем программу сохранения результата игрока. Программе задается имя игрока и его результат, а она добавляет эту запись в отсортированный список. Рейтинг результатов.
Источник
Функция open() в Python, открывает файл на чтение/запись.
Открывает файл для чтения или записи файлового потока.
Синтаксис:
Параметры:
- file — абсолютное или относительное значение пути к файлу или файловый дескриптор открываемого файла.
- mode — необязательно, строка, которая указывает режим, в котором открывается файл. По умолчанию ‘r’ .
- buffering — необязательно, целое число, используемое для установки политики буферизации.
- encoding — необязательно, кодировка, используемая для декодирования или кодирования файла.
- errors — необязательно, строка, которая указывает, как должны обрабатываться ошибки кодирования и декодирования. Не используется в -бинарном режиме
- newline — необязательно, режим перевода строк. Варианты: None , ‘\n’ , ‘\r’ и ‘\r\n’ . Следует использовать только для текстовых файлов.
- closefd — необязательно, bool , флаг закрытия файлового дескриптора.
- opener — необязательно, пользовательский объект, возвращающий открытый дескриптор файла.
Возвращаемое значение:
Описание:
Функция open() открывает файл для чтения или записи при помощи файлового потока. Если файл не может быть открыт, бросается исключение OSError .
Функция возвращает файловый объект, который имеет методы, позволяющие читать и записывать информацию различными способами.
Аргумент file — это строка, определяющая абсолютное или относительное расположение открываемого файла в файловой системе или целочисленный файловый дескриптор файла. Если задан файловый дескриптор, он закрывается, когда возвращаемый файловый поток закрывается, если для closefd не установлено значение False .
Аргумент mode — это необязательная строка, которая указывает режим, в котором открывается файл. По умолчанию ‘r’ , это означает, что файл открыт для чтения в текстовом режиме.
Значения аргумента mode :
- r — открывает файл только для чтения,
- w — открыт для записи (перед записью файл будет очищен),
- x — эксклюзивное создание, бросается исключение FileExistsError , если файл уже существует.
- a — открыт для добавления в конец файла (на некоторых Unix-системах пишет в конец файла вне зависимости от позиции курсора)
- + — символ обновления (чтение + запись).
- t — символ текстового режима.
- b — символ двоичного режима (для операционных систем, которые различают текстовые и двоичные файлы).
Режим по умолчанию ‘r’ , открывает файл только для чтения текста, синоним ‘rt’ . Режимы ‘r+’ и ‘r+b’ открывают файл и устанавливают курсор на начало файла, запись в файл начинается с места остановки курсора при его чтении перед записью. Если файл перед записью не читался то запись осуществляется в начало файла. Режимы ‘w’ и ‘wb’ создают новый файл или открывают существующий файл только для записи, с последующей его очисткой (стирает все перед записью). У режимов ‘w+’ и ‘wb+’ поведение такое же как в предыдущем случае, только если не закрывать файл после записи, его еще можно потом прочитать.
Варианты использования режимов:
- ‘r’ — Открывает файл только для чтения. Указатель файла помещается в начале файла. Это режим «по умолчанию».
- ‘rb’ — Открывает файл в бинарном режиме только для чтения. Указатель файла помещается в начале файла. Это режим «по умолчанию».
- ‘r+’ — Открывает файл для чтения и записи. Указатель файла помещается в начало файла.
- ‘rb+’ — Открывает файл в бинарном режиме для чтения и записи. Указатель файла помещается в начале файла. Это режим «по умолчанию».
- ‘w’ — Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.
- ‘wb’ — Открывает файл в бинарном режиме только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.
- ‘w+’ — Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создается новый файл для чтения и записи.
- ‘wb+’ — Открывает файл в бинарном режиме для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создается новый файл для чтения и записи.
- ‘a’ — Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
- ‘ab’ — Открывает файл в бинарном режиме для добавления. Указатель файла находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
- ‘a+’ — Открывает файл для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.
- ‘ab+’ — Открывает файл в бинарном режиме для добавления и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.
Python различает двоичный и текстовый ввод/вывод. Файлы, открытые в двоичном режиме, возвращают содержимое в виде bytes объектов без какого-либо декодирования. В текстовом режиме (по умолчанию или когда ‘t’ включен в аргумент mode ) содержимое файла возвращается как строка байтов, которые были сначала декодированы с использованием кодировки, используемой системой по умолчанию или с использованием переданного аргумента encoding .
Аргумент buffering — необязательное целое число, используемое для установки политики буферизации.
- 0 — отключить буферизацию, только для бинарного режима;
- 1 — построчная буферизация, только для текстового режима;
- int число > 1 — размер буфера в байтах.
- -1 — по умолчанию.
У текстовых файлов, если buffering не задан, используется построчная буферизаця. Двоичные файлы буферизируются кусками фиксированного размера. Этот размер определяется эвристикой, пытающейся определить размер блока устройства, на котором находится файл, в случае неудачи использует io.DEFAULT_BUFFER_SIZE . Для многих систем буфер равен 4096 или 8192 байт.
Аргумент encoding — это имя кодировки, используемой для декодирования или кодирования файла. Это аргумент следует использовать только в текстовом режиме. Кодировка по умолчанию зависит от платформы, но может использоваться любая кодировка текста, поддерживаемая Python.
Аргумент error является необязательным и указывает как должны обрабатываться ошибки кодирования и декодирования. Следует использовать только для текстовых файлов.
Доступны стандартные обработчики ошибок:
- ‘strict’ — бросает исключение ValueError , если есть ошибка кодирования. Значение по умолчанию None имеет тот же эффект.
- ‘ignore’ — игнорирует ошибки. Обратите внимание, что игнорирование ошибок кодирования может привести к потере данных.
- ‘replace’ — вставляет символ ? на место непрочитанных символов, ввиду их отсутствия в используемой кодировке.
- ‘surrogateescape’ — любые некорректные байты будут представлены как символы Юникода в диапазоне от U+DC80 до U+DCFF . Эти символы, при обратной операции кодирования будут возвращаться в те же байты. Полезно для обработки файлов в неизвестной кодировке.
- ‘xmlcharrefreplace’ — поддерживается только при записи в файл. Символы, не поддерживаемые кодировкой, заменяются соответствующей ссылкой на символ XML.
- ‘backslashreplace’ — заменяет искаженные данные на escape-последовательности Python с обратной косой чертой.
- ‘namereplace’ — поддерживается только при записи, заменяет не поддерживаемые символы на \N <. >escape-последовательности.
Аргумент newline контролирует работу режима новой строки. Работает только с текстовым режимом. Допустимые аргументы: None , » , ‘\n’ , ‘\r’ и ‘\r\n’ .
Это работает следующим образом:
- Чтение файла:
- если аргумент newline=None или не указан, то символами окончания строк ‘\n’ , ‘\r’ или ‘\r\n’ на выходе преобразуются в разделитель строки ‘\n’ .
- если newline=» , то получим результат с вырезанными символами окончания строк ‘\n’ , ‘\r’ или ‘\r\n’ , то есть файл прочитается как одна большая строка.
- если newline=’\n’ , то в результате чтения функция open() уберет только символ \n из результата, если newline=’\r’ , то только \r , если newline=’\r\n’ , то только сочетание ‘\r\n’ не будет учитываться.
- При записи файла:
- если аргумент newline=None или не указан, то символы окончания строк \n будут переведены в разделители строк, которые система использует по умолчанию;
- если newline=» или newline=’\n’ , то символы окончания строк \n переводится в разделители строк не будут. В файл запишется одна большая строка.
- если newline=’\r’ , то в результате записи функция open() сохранит значение \r в качестве разделителя строк, если newline=’\r\n’ , то запишется сочетание ‘\r\n’ .
Аргумент closefd по умолчанию True . Если аргумент closefd=False и вместо имени файла был задан его дескриптор, то при закрытии файла функцией open() , базовый дескриптор файла будет оставаться открытым. Если задано имя файла, closefd должно быть True (по умолчанию), иначе возникнет ошибка.
Необязательный аргумент opener (по умолчанию None ), пользовательский объект поддерживающий вызов, который следует использовать для открытия файла. Этот объект получая на входе file и flags , должен возвращать открытый дескриптор файла.
Дополнительно смотрите функцию os.open() , которая открывает файл и возвращает его файловый дескриптор. Вновь созданный дескриптор не наследуется .
В следующем примере используется параметр dir_fd функции os.open() , чтобы открыть файл относительно данного каталога:
Тип файлового объекта, возвращаемого функцией open() , зависит от режима. Когда используется open() , чтобы открыть файл в текстовом режиме ‘w’ , ‘r’ , ‘wt’ , ‘rt’ и т. д., она возвращает подкласс io.TextIOBase , в частности io.TextIOWrapper . При использовании для открытия файла в двоичном режиме с буферизацией возвращаемый класс является подклассом io.BufferedIOBase .
Итоговый класс меняется в зависимости от операции:
- в режиме чтения двоичных файлов он возвращает io.BufferedReader ;
- в двоичном режиме записи и в двоичном режиме добавления он возвращает io.BufferedWriter ;
- в режиме чтения/записи — io.BufferedRandom .
Когда отключена буферизация, исходный поток возвращает подклассы io.RawIOBase , io.FileIO .
Примеры чтения из файла и записи в файл.
Чтение и вывод на печать стазу всего файла
Чтение всего файла и вывод на печать построчно
Создадим файл newfile.txt и запишем в него строку. Если файл с таким именем уже существует, то данные внутри файла сотрутся.
Открываем файл на запись с помощью менеджера контекста и пишем данные в конец файла.
Источник