Работа с файловыми объектами: функция 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. Также в арсенале языка есть объекты, похожие на файлы, - сокеты, потоки командной оболочки и ввода-вывода.

Комментарии