Работа с файловыми объектами: функция open, чтение и запись в файлы в Python
Файлы относятся к базовым типам данных языка Python. Это связующий интерфейс между кодом и именованными областями памяти компьютера. Файлы выполняют функцию «консервирования» объектов. Они позволяют сохранять любую информацию с ее последующей выгрузкой и обработкой. Мы рассмотрим, как осуществить запись в файл в Python и обратное чтение данных с практическими примерами.
Как открыть файл?
Работа с этим типом данных стартует со встроенной функции open. Она создает объект файла, который обеспечивает связь с внешним документом на компьютере. После того как вы вызовите функцию, можно выполнять операции чтения или записи в файлы в Python.
Для новичков работа с файлами покажется сложной. Они отличаются от привычных строк, чисел, словарей. Для взаимодействия с ними не используются литералы последовательностей или отображений, только методы.
Большая часть методов направлена на выполнение ввода и вывода информации, но есть и более специфические. Например, инструкция output.flush(), которая выталкивает на диск выходные буферы. Но мы начнем изучение с того, как открыть файл.
Первым делом нужно вызвать open(), в скобках передать функции, имя внешнего файла и режим работы с ним:
- r – означает, что по умолчанию откроется режим чтения;
- w – режим записи в файлы в Python;
- a – для записи информации в самый конец документа;
- b – обработка двоичных файлов;
- знак «+» означает чтение и запись одновременно.
Важное правило – все аргументы нужно указывать как литералы строк, то есть в кавычках и через запятую:
- >>>This_file = open(«C:\odd», «w») #Пример вызова функции open в интегрированной среде разработки.
Как использовать файлы?
После того как файл открыт, вы можете использовать все его методы. Содержимое для чтения будет представлено в виде строк. Для записи в файлы в Python информация также должна иметь вид строковых объектов.
Список наиболее используемых операций:
- input.read() – вернет информацию в качестве единой строки;
- input.readline() – прочитать следующую строку;
- input.readlines() – представить файл для чтения целиком со списком строк;
- .write() – запись строк;
- .writelines() – запись всех строк;
- .close() – вручную закрыть документ.
Особенности работы с файлами
Вся информация, содержащаяся внутри файлов, представлена в виде строковых объектов. Поэтому прежде чем приступить к ее обработке, нужно выполнить преобразование данных. Используйте для этого встроенные методы int() или list(). А также выражения для форматирования строк.
Использовать метод close необязательно. Но при работе с flush освобождаются ресурсы ОС и происходит выталкивание выходных буферов. По умолчанию вывод происходит посредством промежуточных буферов. Когда осуществляется запись в файл в Python, информация не сразу попадает на диск, а только в момент закрытия.
Пример записи в файл
Разберем пример работы с текстовым файлом в интерактивном сеансе. Первый шаг – это открыть файл в IDLE. Предварительно его создавать нет необходимости:
- >>>первый_ф = open(«первый_файл.txt», «w»)
- >>>первый_ф.write(«Любой текст\n») #Записываем строки
- 12
- >>>первый_ф.write(«И снова любой текст\n»)
- 20
- >>>первый_ф.close() #Закрываем;
- >>>первый_ф = open(«первый_файл.txt»)
- >>>первый_ф.readline() #Читаем, то, что записано
- «Любой текст\n»
После записи строки в файл, Python 3.0 возвращает число введенных символов. В предыдущей версии этого не происходит. В примере использовался символ конца строки \n. Без него метод write запишет все сплошным текстом.
Если вы хотите прочесть содержимое файла без указания \n в конце, воспользуйтесь методом read:
- >>>print(open(«первый_файл.txt»).read())
- любой текст;
- и снова любой текст;
Просмотреть каждую строку поочередно можно посредством итерации:
- >>>for x in open(«первый_файл.txt»):
- print(x, end = « »)
- любой текст
- и снова любой текст #Каждая новая строка будет выведена с отступом.
Сохранение базовых объектов языка Python в файл
В текстовый файл можно сохранять любые встроенные или созданные вручную объекты. Чтобы осуществить запись в файлы в Python построчно, каждый элемент нужно предварительно преобразовать в строку. Также нужно помнить, что методы не форматируют данные.
- >>>пример_2 = open(«второй_файл.txt», «w»)
- >>>Список = [1,8, «r»]
- >>>C, B, P = 34, 90, 56
- >>>Стр = «Набор символов»
- >>>пример_2.write(str(Список) + «\n»)
- 12
- >>>пример_2.write(«%s, %s, %s\n» % (C, B, P))
- 11
- >>>пример_2.write(Стр + «\n»)
- 15
- >>>пример_2.close()
- >>>print(open(«второй_файл.txt»).read())
- [1, 8, «r»]
- 34, 90, 56
- набор символов
В этом примере сначала создается новый файловый объект «второй_файл.txt» для записи. Пяти именам присваиваются значения списка, строки и целых чисел. Перед записью каждый объект преобразуется в строку. В конце файл открывается с помощью встроенной функции print и метода read.
По тому же принципу осуществляется в Python запись словаря в файл. Необходимо вызвать функцию str и передать ей в качестве аргумента объект. Сложнее всего не сохранить данные, а извлечь их и превратить обратно в словари или числа.
Преобразовать строки в объекты языка поможет метод readline:
- >>>L = open(«второй_файл.txt»)
- >>>F = L.readline()
- >>>F
- «34, 90, 56\n»
- >>>Numbers = F.split(«,») #По запятым разбить на подстроки
- >>>Numbers
- [«34», «90», «56\n»]
- >>>Numbers = [int(x) for x in Numbers] #Преобразовать весь список
- >>>Numbers
- [34, 90, 56]
Запись объектов с помощью специальных модулей
В состав стандартной библиотеки входит модуль под названием pickle. Это чрезвычайно полезный инструмент для записи и обратного извлечения информации. Особенно в том случае, когда вы не доверяете источнику файла.
Модуль представляет собой универсальную утилиту, которая автоматически форматирует и преобразует данные. Чтобы записать объект любого типа (словарь), его достаточно передать pickle:
- >>>Словарь = {«восемь»: 8, «три»: 3, «ноль»: 0}
- >>>Словарь
- {«восемь»: 8, «три»: 3, «ноль»: 0}
- >>>документ = open(«мой_документ.pkl», «wb»)
- >>>import pickle
- >>>pickle.dump(Словарь, документ)
- >>>документ.close()
- >>>документ = open(«мой_документ.pkl», «rb»)
- >>>Д = pickle.load(документ)
- >>>Д
- {«восемь»: 8, «три»: 3, «ноль»: 0}
С модулем нет необходимости извлекать и преобразовывать данные вручную. Он сам выполняет сериализацию объектов в строку байтов и обратно. Для этого в аргументах open указывается wb – write binary.
Аналогично pickle, «консервировать» данные можно с помощью модуля Python – JSON. Запись в файл осуществляется методом dump. В качестве аргументов указываются сохраняемые объекты, которые автоматически сериализуются в строку JSON-формата.
- >>>import json
- >>>Словарь = {«восемь»: 8, «три»: 3, «ноль»: 0}
- >>>with open(«мой_документ.json», «w») as м_д:
- >>>json.dump(Словарь, м_д)
Существуют и более сложные способы работы с файлами. Например, операция сканирования, организация циклов записи. Чтобы увидеть весь перечень методов, воспользуйтесь в интерактивном сеансе функциями help или dir. Также в арсенале языка есть объекты, похожие на файлы, - сокеты, потоки командной оболочки и ввода-вывода.