Работа с файлами в Питоне представлена широким набором возможностей. Имеются как встроенные инструменты, так и сторонние модули и библиотеки, позволяющие открывать и читать документы, а также записывать в них любую информацию.
Python умеет взаимодействовать со следующими форматами файлов: txt, jpg, csv, json, html, xlsx, pdf и целым рядом других. Удобство заключается в том, что для каждого случая есть отдельный модуль, ускоряющий разработку.
Виртуальная среда под проекты
Язык Python удобен тем, что может взаимодействовать с разными проектами при различных настройках. Как сказал создатель протокола BitTorrent Брэм Коен:
«Питон удобен своей простотой и удобным синтаксисом. Он позволяет инкапсулировать код, имеет широкую поддержку и опциональные параметры»
https://www.inspiringquotes.us/quotes/rHcs_LYZ8MvJh
Важно то, что инкапсуляция работает не только на уровне объектов и классов, но и в масштабах самого языка. Мы можем создавать проекты с отличающимися настройками, и они не будут друг другу «мешать».
Хорошей практикой считается активация виртуальной среды под конкретную проблему. Другими словами, устанавливать библиотеки нужно не глобально, для всей операционной системы, а для отдельного проекта. В этом помогает виртуальное окружение. Прежде чем переходить к написанию кода, нужно сформировать окружение проекта.
В Windows это делается следующим образом (в нужной папке открываем терминал и прописываем команды):
py -m venv .venv
.venv\Scripts\activate
Вначале мы создаем папку виртуального окружения «.venv» (имя может быть любым), а затем активируем ее. Теперь все, что мы установим, будет связано только с данным проектом.
В UNIX-системах (Linux, MacOS) команды будут такими:
python3 -m venv .venv
source .venv\bin\activate
Открытие и чтение текстового файла
Для этого в Питоне имеются следующие конструкции:
- Функция open() – открывает документ в виде файлового объекта;
- Функция close() – закрывает файл и удаляет его из оперативной памяти;
- Контекстный менеджер with (автоматически очищает память после работы с файлом). Его синтаксис показан на рисунке ниже.
- Метод read() – считывает документ полностью или частично в виде строки;
- Метод readline() – построчно выводит содержимое объекта;
- Метод readlines() – формирует из строк файла список.
В папке проекта создадим текстовый документ «econ.txt» с таким наполнением:
Девальвация национальной валюты
Индексация пенсий прошла успешно
Инфляционные ожидания игроков рынка
Экономическая ситуация в регионе
Писать код будем в IDE PyCharm (среду разработки скачиваем с официального сайта).
Пример кода:
# Открываем файл в режиме чтения и кодировке UTF-8
txt = open('econ.txt', 'r', encoding='utf-8')
# Выводим на печать первую строку
print(txt.readline())
# Удаляем объект из памяти
txt.close()
# Открываем файл при помощи контекстного менеджера
with open('econ.txt', 'r', encoding='utf-8') as txt:
# Печатаем первые 20 символов
print(txt.read(20))
# Файл удалится из памяти сам
Результат выполнения:
Девальвация национальной валюты
Девальвация национал
Режимы работы с документом
Вторым параметром в функцию open() передается режим работы с файлом. Охарактеризуем их (таблица 1).
Режим | Характеристика |
r | Открыть для чтения |
w | Открыть для записи (если такого документа не существует, то он будет создан) |
a | Дописать новое содержимое в файл в дополнение к имеющемуся |
x | Открыть для записи в несуществующий файл |
t | Представить контент как текст |
+ | Открыть документ как для чтения, так и записи |
b | Представить контент в виде байтов |
Если данный аргумент не передать, то файл по умолчанию будет отображаться в виде текста в режиме чтения. Кодировку указывать всегда обязательно, так как содержимое может предстать в виде нечитаемой «каши» символов.
Читайте также: Питон для начинающих.
Запись текстового контента в файл
Питон позволяет дозаписывать данные в документ или наполнить его новой информацией. В режиме «w» файл всегда будет перезаписываться полностью.
Запись текста возможна двумя способами:
- Через функцию write(),
- При помощи функции print().
Пример кода:
# Если файл существует, то получим ошибку
with open('somеtext.txt', 'x', encoding='utf-8') as txt:
txt.write('Python')
# Дописываем новые данные в документ
with open('somеtext.txt', 'a', encoding='utf-8') as txt:
print('is great', file=txt)
# При записи все старые сведения из файла удалятся
with open('somеtext.txt', 'w', encoding='utf-8') as txt:
print('Program', file=txt)
Первая операция создает файл и записывает в него строчку «Python». Если он существует, то вызовется ошибка FileExistsError. Это своего рода защита от перезаписи.
Вторая операция добавит новую строку в документ. Теперь в нем будет две строки: «Python» и «is great».
В третьем случае старые данные из «somеtext.txt» удалятся, а вместо них будет внедрена новая строчка «Program».
Таким образом, если требуется дозаписывать информацию в файл, то используем режим «a», в противном случае ограничиваемся режимом «w».
Чтение и запись json-файлов
Для работы с json-объектами предусмотрен встроенный модуль json. Его нужно импортировать для начала.
Практически все объекты Питона можно безболезненно преобразовывать в json-сущности.
В библиотеке json имеется 4 основные функции (таблица 2).
Функция | Характеристика |
dumps() | Преобразовывает объекты Питона в json |
dump() | Записывает преобразованные в json-формат данные в файл |
loads() | Преобразовывает json-данные в словарь |
load() | Считывает содержимое json-файла и делает из них словарь |
Так как мы рассматриваем тему создания и чтения файлов, то будем использовать соответствующие инструменты.
Создадим на ПК документ «my.json» с таким содержимым:
{
"student1": {
"name": {
"first": "Иван",
"surname": "Смирнов"
},
"is_present": false,
"birth_year": 2000,
"hobbies": [
"Спорт",
"Рисование"
],
"address": null
}
}
Теперь считаем их и представим в виде словаря Python.
Пример кода:
import json
with open('my.json', 'r', encoding='utf-8') as student:
data = json.load(student)
print(data)
Результат выполнения:
{'student1': {'name': {'first': 'Иван', 'surname': 'Смирнов'}, 'is_present': False, 'birth_year': 2000, 'hobbies': ['Спорт', 'Рисование'], 'address': None}}
Как видно, десериализация json-данных осуществляется следующим образом:
- Двойные кавычки преобразованы в одинарные;
- Булево значение false превратилось в False;
- Объект null соответствует значению None в Питоне.
А теперь расширим информацию в документе «my.json», добавив еще одного студента.
Пример кода:
import json
student = {
'name': {
'first': 'Дмитрий',
'surname': 'Смолов'
},
'is_present': True,
'birth_year': 2001,
'hobbies': ['Музыка', 'Чтение'],
'address': 'Ул. Мира, 5-12'
}
with open('my.json', 'r+', encoding='utf-8') as file:
data = json.load(file)
data['student2'] = student
file.seek(0)
json.dump(data, file, ensure_ascii=False, indent=4)
Открываем файл в режиме чтения и возможности записи («r+»). Считываем имеющееся в нем содержимое и преобразуем его в словарь. Добавляем новую запись в словарь с ключом «student2». Полностью переписываем содержимое документа с учетом новой информации: делаем отступы (indent=4) для удобства чтения, а также отключаем режим «только ASCII», чтобы появилась возможность вставлять кириллицу.
Запись excel-файлов
Для сохранения табличных данных удобнее всего пользоваться библиотекой csv, так как с этим форматом работать проще, он быстрее, может открываться без наличия Excel на рабочем компьютере.
Конечно, бывают ситуации, когда может потребоваться поработать именно с файлами формата «xlsx», для чего подойдет модуль openpyxl. Сначала установим данную библиотеку, так как она не встроена в Питон по умолчанию:
pip install openpyxl
С ее помощью можно читать и записывать данные в «эксель»-файлы.
Основные инструменты, с которыми будем работать:
- Workbook() – класс для создания табличного файла;
- Create_sheet() – внедрение страницы с определенным именем;
- Save() – сохранение результата в файл;
- Cell() – запись информации в ячейку;
- Get_column_letter() – получение буквенного обозначения колонки.
Пример кода:
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
# Создаем таблицу
wb = Workbook()
# Задаем имя будущего файла
file = 'example.xlsx'
# Фомируем страницу с заголовком "Запись"
sheet1 = wb.create_sheet(title="Запись")
# Вписываем в первые 8 строк числа для 3-х колонок
for row in range(1, 8):
sheet1.append([3, 5, 7])
# Заполняем строки с 9 по 14-ю и колонки с А до F
for row in range(9, 15):
for col in range(1, 7):
sheet1.cell(column=col, row=row, value=f'{get_column_letter(col)}-{row}')
# Сохраняем файл
wb.save(filename=file)
В результате в созданном файле будем иметь следующее содержимое (рисунок 2).
Также вкладка получит название «Запись».
Файлы операционной системы
Встроенный модуль os позволяет просматривать содержимое каталогов и редактировать его.
Ознакомимся со следующими функциями:
- mkdir() – создание папки в выбранном каталоге;
- walk() – определение списка всех файлов и директорий внутри заданной и ее подпапках;
- remove() – удаление файла из системы;
- rename() – переименование документа и пр.
Приведем несколько примеров работы с библиотекой.
Пример кода:
import os
# Создаем в текущей директории папку
os.mkdir('temp')
# Перемещаемся в нее
os.chdir('temp')
# Внутри каталога "temp" генерируем 7 текстовых файлов
for index in range(7):
with open(f'{index}.txt', 'w', encoding='utf-8') as file:
print(index, file=file)
# Переименовываем документ "1.txt"
os.rename('1.txt', 'первый.txt')
# Удаляем файл "3.txt"
os.remove('3.txt')
# Просматриваем содержимое папки temp
print(os.listdir('.'))
В результате работы программы в папке «temp» окажутся следующие файлы: ‘0.txt’, ‘2.txt’, ‘4.txt’, ‘5.txt’, ‘6.txt’, ‘первый.txt’.
Редактирование изображений в Питоне
Для работы с картинками используют внешний модуль Pillow. Он позволяет создавать и изменять рисунки, а также накладывать на них текст.
В первую очередь следует установить модуль:
pip install Pillow
Нарисуем квадрат красного цвета с длиной стороны 400 пикселей, применим к нему фильтр размытия, а затем сделаем его черно-белым.
Пример кода:
from PIL import Image, ImageDraw, ImageFilter
# Создаем рисунок с белым фоном
img = Image.new('RGB', (600, 600), 'white')
draw = ImageDraw.Draw(img)
# Помещаем на него красный квадрат (рисунок 3)
draw.rectangle((100, 100, 500, 500), fill='red')
# Делаем размытие (рисунок 4)
img = img.filter(ImageFilter.BoxBlur(radius=75))
# Преобразуем картинку в черно-белую (рисунок 5)
img = img.convert('L')
Заключение
Мы рассмотрели лишь часть возможностей Питона по работе с файлами. Создание, считывание, вывод в файлы может осуществляться разными способами. Более того, практически все форматы и типы документов могут редактироваться при помощи Python. В зависимости от задачи найти нужный модуль не составит труда.
Ответы на вопросы читателей
Источники
- Документация по библиотеке Pillow. URL: https://pillow.readthedocs.io/en/stable/
- Официальная документация по Python. URL: https://docs.python.org/3/
- Справочные материалы по модулю openpyxl. URL: https://openpyxl.readthedocs.io/en/stable/
- Среда разработки PyCharm. URL: https://www.jetbrains.com/ru-ru/pycharm/
- Чтение и создание csv-файлов. URL: https://docs.python.org/3/library/csv.html
Источник титульного фото: coderoad.ru (вопрос от пользователя Vivek от 29 марта 2020 года)
Подписывайтесь на наш канал в Telegram, чтобы получать свежие статьи своевременно!