Работа с файлами в Питоне

Работа с файлами в Питоне представлена широким набором возможностей. Имеются как встроенные инструменты, так и сторонние модули и библиотеки, позволяющие открывать и читать документы, а также записывать в них любую информацию.

Python умеет взаимодействовать со следующими форматами файлов: txt, jpg, csv, json, html, xlsx, pdf и целым рядом других. Удобство заключается в том, что для каждого случая есть отдельный модуль, ускоряющий разработку.

В данной статье в формате «how to» рассмотрим основной инструментарий для осуществления работы с документами различных типов в Python.

Виртуальная среда под проекты

Язык 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 (автоматически очищает память после работы с файлом). Его синтаксис показан на рисунке ниже.
Чтение из файла питон
Рисунок 1 – Синтаксис контекстного менеджера 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Представить контент в виде байтов
Таблица 1 – Режимы открытия файла

Если данный аргумент не передать, то файл по умолчанию будет отображаться в виде текста в режиме чтения. Кодировку указывать всегда обязательно, так как содержимое может предстать в виде нечитаемой «каши» символов.

Читайте также: Питон для начинающих.

Запись текстового контента в файл

Питон позволяет дозаписывать данные в документ или наполнить его новой информацией. В режиме «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-файла и делает из них словарь
Таблица 2 – Ключевые функции модуля 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).

Запись в файл Питон
Рисунок 2 – Результат наполнения xlsx-файла

Также вкладка получит название «Запись».

Файлы операционной системы

Встроенный модуль 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: создание файла
Рисунок 3 – Красный квадрат
Как открыть файл в Питоне
Рисунок 4 – Размытие картинки
Работа с файлами Питон
Рисунок 5 – Преобразование в черно-белый цвет

Заключение

Мы рассмотрели лишь часть возможностей Питона по работе с файлами. Создание, считывание, вывод в файлы может осуществляться разными способами. Более того, практически все форматы и типы документов могут редактироваться при помощи Python. В зависимости от задачи найти нужный модуль не составит труда.

Ответы на вопросы читателей

Сколько времени потребуется на изучение Питона?
При постоянной практике и достаточном ежедневном внимании к языку Python основам синтаксиса и базовым операциям можно научиться за 1-2 месяца. Уверенное владение базовыми библиотеками, популярными сторонними модулями, объектно-ориентированном подходе может потребовать от 3 до 6 месяцев. Нужно осознавать и то, что для каждого обучаемого сроки индивидуальны.
Как работать с текстовыми файлами в Питоне?
Взаимодействие с текстовыми файлами связано с функциями open(), close(), read(), readlines(), контекстным менеджером with и рядом других. Эти инструменты позволяют как читать документы, так и осуществлять в них запись.
Как работать с таблицами в языке Python?
Универсальный формат табличной информации – csv (Comma Separated Values, разделенные запятой данные). Его хорошо понимают разные сайты, среды разработки, операционные системы.

Чтобы взаимодействовать с excel-файлами требуется установить модуль openpyxl.

Для работы с Гугл-таблицами нужно получить доступ к программному интерфейсу в качестве разработчика.
Что такое json-формат данных?
Информация на Интернет-ресурсах зачастую представлена в виде json-данных. Она очень напоминает словари (dictionaries) в Питоне. Именно поэтому работать с этим форматом очень удобно.

Он используется для передачи и получения информации между API сайтов и программ.
Какой модуль используется для взаимодействия с файлами операционной системы?
Встроенная библиотека os позволяет работать с каталогами и файлами операционной системы. Возможности не ограничены конкретной «операционкой» и в большинстве случаев универсальны. Набор инструментария следующий: представление списка документов конкретной папки, создание папок, удаление каталогов и документов, переименование файлов и др.
Как представить текстовый файл в виде строки?
После создания файлового объекта его можно прочитать полностью и вывести на печать.

Пример кода:
---
with open('myfile.txt', 'r', encoding='utf-8') as doc:
print(doc.read())
---
Файл «myfile.txt» открыт в режиме чтения и будет выведен в консоль со всем своим содержимым.
Как создать pdf-файл в Питоне?
В зависимости от исходных данных pdf-документы могут создаваться при помощи разных инструментов: Pillow (когда входная информация в основной своей массе графическая), PyPDF2 (объединение файлов, кодирование-декодирование), fpdf (преобразование текста в pdf-формат) и пр.
Как обрабатывать изображения при помощи языка Python?
Один из самых часто применяемых инструментов – библиотека Pillow. Позволяет решать задачи: извлекать сведения о картинке; менять размеры, обрезать, поворачивать; накладывать фильтры на рисунки (размытие, повышение контраста и др.); добавлять текстовые надписи; создавать изображения.

Источники

  1. Документация по библиотеке Pillow. URL: https://pillow.readthedocs.io/en/stable/
  2. Официальная документация по Python. URL: https://docs.python.org/3/ 
  3. Справочные материалы по модулю openpyxl. URL: https://openpyxl.readthedocs.io/en/stable/
  4. Среда разработки PyCharm. URL: https://www.jetbrains.com/ru-ru/pycharm/
  5. Чтение и создание csv-файлов. URL: https://docs.python.org/3/library/csv.html

Источник титульного фото: coderoad.ru (вопрос от пользователя Vivek от 29 марта 2020 года)


Подписывайтесь на наш канал в Telegram, чтобы получать свежие статьи своевременно!
Лучший способ отблагодарить нас — поделиться статьей с друзьями:
Влад Шляховой — автор Ratenger.com

Издатель и главный редактор Ratenger.com.

Оцените автора
Поделиться мнением