Работа с файлами в Python: основы
Python — это высокоуровневый язык программирования, который способен решать множество повседневных задач, начиная от резервного копирования и чтения e-mail, заканчивая созданием небольшой игры. В этой статье мы разберем, как работать с файлами в Python.
Типы файлов
Особые комбинации данных, записанные в последовательностях битов, называются файлами. Информация в них оформлена, структурирована и обладает собственным именем.
В Python выделяют два типа файлов:
- Текстовые включают в себя то, что может прочесть человек. Открыть их можно, запустив блокнот или другие классические редакторы. Обычно такие файлы имеют расширение .txt или .rtf.
- Бинарные типы выводятся в закодированном формате, то есть с использованием «0» и «1». Они представляют собой комбинации битов и хранятся в расширении .bin.
Операции с файлами
Существует несколько вариантов действий с файлами. Рассмотрим основные операции:
- открытие;
- чтение или запись;
- переименование;
- закрытие.
Давайте разберем каждую из них.
Открытие
Для запуска файлов предусмотрена встроенная функция под названием open(). С ее помощью можно открыть любой документ. Python же будет формировать внутри себя на его основе объект. Функция принимает два следующих аргумента:
- file — название файла, где также прописывается к нему путь ;
- mode — запуск, при котором по умолчанию установлен режим «только для чтения».
В системе предусмотрен ряд режимов для открытия, среди которых:
- для чтения или записи;
- для чтения и записи;
- запуск для присоединения новой информации.
Каждый из этих режимов может обладать текстовым и бинарным вариантами. Во втором случае к буквенному указателю добавляется буква «b». Эти режимы могут комбинироваться.
Режим | Возможности |
r | Только чтение |
w | Запись. Если не найден, то создается новый |
x | Запись. Если не найден, вызывается исключение |
a | Запись. Не стирает данные, а добавляет в конец |
t | Открытие в формате текстового файла |
b | Открытие в виде бинарного файла |
+ | Работа в варианте и записи, и чтения |
После открытия файла сгенерируется особый файловый объект и вы сможете получить о нем сведения. Для этого существуют специальные атрибуты:
- .name – содержит в себе имя;
- .closed – показывает, закрыт ли документ;
- .mode – отображает вариант доступа;
- .softspace – определяет необходимость добавления пробела.
Синтаксис метода выглядит следующим образом:
f = open(file_name, access_mode)
или
f = open('exmp.txt','r')
Чтение
Python позволяет читать файлы или записывать в них информацию. Важно, чтобы открытие было произведено в том формате, который позволяет выполнять эти действия.
Метод read() предназначен для чтения файла, запущенного в варианте «только для чтения». Он принимает в качестве аргумента число символов, которые требуется прочесть. То есть, если вы передадите цифру 10, то будут отображены только первые 10 знаков.
Например:
f = open('exmp.txt','r') f.read(10)
Следующей функцией будет readline(). Она получает содержимое документа по строкам и подходит для больших объемов. Здесь также существует удобный способ, позволяющий не считывать весь файл полностью, а обращаться только к нужным строкам. Это возможно благодаря объекту io.TextIOWrapper.
Запись
Для записи в файлы Python использует метод write(). При этом важно, чтобы открытие осуществлялось в режиме записи. Если файла не существовало, он будет сгенерирован. Еще одним аспектом при использовании метода является то, что в него могут передаваться исключительно строки. Если вы планируете передавать другой тип данных, то лучше заранее форматировать его в строковый тип.
Метод write() может записывать и большие объемы информации. Для этого нужно представить их в виде списка строк. Аналогично функции считывания, для записи существует построчный вариант writelines(). Python самостоятельно не расставляет переносы, поэтому продумать этот момент лучше заранее.
Пример синтаксиса:
f = open('exmp.txt','w') f.write('Привет Мир') f.close()
Менее популярным, но при этом одним из наиболее удобных способов записи можно назвать метод print(). Он выводит информацию в консоль, но если передавать в необязательный аргумент тип объекта file, то поток будет перенаправляться из консоли напрямую в файл. Главным достоинством такого подхода можно считать то, что метод print() принимает не только строковые данные. Это значит, что при необходимости он самостоятельно конвертирует информацию.
Python позволяет указывать позицию нахождения в файле. После первичного обращения вы можете получить пустую строку. Это случается из-за того, что указатель перемещен в конец. Для точного определения его позиции предусмотрен метод tell(), который говорит, в каком количестве байт от начала он расположен в данный момент. Затем можно воспользоваться методом seek(), который переведет нас на требуемую позицию. В нем также следует указывать количество байт, при этом 0 определяет начало файла, 1 – текущую позицию, 2 – конец.
Изменение названия
Еще одной возможностью при работе с файлами будет изменение их названия. Для этого используется rename(), но предварительно необходимо импортировать специальный модуль os.
Например:
import os os.rename(exmp,file) # где exmp – изначальное имя файла, а file – новое
Закрытие
Открыв файл и закончив все манипуляции с ним, необходимо будет его закрыть, тем самым освободив ресурсы и удалив лишние данные. Python способен самостоятельно закрыть файл, когда объект передается другому документу. Но давайте рассмотрим, какие существуют варианты корректного закрытия:
- метод close(), прописанный после всех необходимых действий;
- метод try/finally — при появлении операций с исключениями файл будет автоматически закрыт;
- инструкция with/as, упрощающая обработку исключений, поэтому метод close() в этом случае будет не нужен.
Последний способ считается наиболее предпочтительным, так как в нем Python самостоятельно закрывает файл. Это значит, что вам не нужно дополнительно напоминать об этом в коде. Также в этом случае не будут генерироваться исключения, например, если файл не обнаружен.
Синтаксисы вариантов закрытия оформляются в следующем виде:
- для метода close():
f = open('exmp.txt','r') f.close()
- для комбинации try/finally:
f = open('exmp.txt','r') try: #код finally: f.close()
- для инструкции with/as:
with open('exmp.txt') as f: #код
Ошибки
В ряде случаев при работе с файлами могут происходить ошибки. Файл может закрыться, если к нему будут обращаться несколько программ одновременно, или произойдет ошибка разрешения, из-за которой возникнет сбой в работе. В таких случаях будет появляться IOError.
Выявить ошибки и решить их можно с помощью оператора with или конструкции кода try/except, которые применялись для корректного закрытия файлов. Они сразу предусматривают исключения, что значительно упрощает процесс работы кода.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: