Python – отличный инструмент для обработки данных. Вполне вероятно, что программа, которую вы пишете, будет управлять данными или выполнять операции чтения и записи. Потому особенно полезно знать, как Python обрабатывает различные форматы файлов, в которых хранятся разные типы данных.
Для примера представим программу Python, которая проверяет список пользователей для контроля доступа. Список пользователей, вероятно, будет храниться в текстовом файле. Ещё один пример: программа для выполнения финансового анализа получает вводные данные из сохраненной таблицы. Как видите, вне зависимости от приложения, входные и выходные данные задействованы практически всегда.
В данном руководстве речь идёт о типах форматов, которые поддерживает Python 3. Также руководство научит вас обрабатывать текстовые файлы.
Требования
Для выполнения руководства вам понадобится предварительно настроенная среда Python 3. Все необходимые инструкции вы найдёте в следующих статьях:
Форматы файлов в Python 3
Python очень гибкий и может относительно легко обрабатывать множество различных форматов файлов. Вот основные форматы:
Формат | Описание |
txt | Обычный текстовый файл, который хранит данные в виде символов (или строк) и исключает структурированные метаданные. |
CSV | Файл, который хранит данные в виде таблицы; для структурирования хранимых данных используются запятые (или другие разделители). |
HTML | Файл Hypertext Markup Language хранит структурированные данные; такие файлы используются большинством сайтов. |
JSON | Простой файл JavaScript Object Notation, один из наиболее часто используемых форматов для хранения и передачи данных. |
Данное руководство рассматривает только формат txt.
1: Создание текстового файла
Сначала нужно создать тестовый файл для работы. Откройте текстовый редактор и создайте файл days.txt. Добавьте в новый файл список дней недели:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Сохраните файл и запомните его местонахождение (это нужно для дальнейшей работы). В данном случае файл будет храниться в каталоге /users/8host/days.txt.
2: Открытие файла
Создайте сценарий files.py в текстовом редакторе и для простоты сохраните его в тот же каталог (/users/8host/).
Чтобы открыть файл в Python, нужно связать файл на диске с переменной Python. Сначала сообщите Python, где находится нужный файл. Чтобы открыть какой-либо файл, Python должен знать путь к этому файлу. Путь к файлу days.txt выглядит так: /users/8host/days.txt.
В файле files.py создайте переменную path и укажите в ней путь к файлу days.txt.
Теперь можно использовать функцию open(), чтобы открыть файл days.txt. В качестве первого аргумента функция open() требует путь к файлу, который нужно открыть. Эта функция имеет много других параметров. Одним из основных параметров является режим; это опциональная строка, которая позволяет выбрать режим открытия файла:
- ‘r’: открыть файл для чтения (опция по умолчанию).
- ‘w’: открыть файл для записи.
- ‘x’: создать новый файл и открыть его для записи.
- ‘a’: вставить в файл.
- ‘r+’: открыть файл для чтения и записи.
Попробуйте открыть файл для чтения. Для этого создайте переменную days_file и задайте в ней опцию open() и режим ‘r’, чтобы открыть файл days.txt только для чтения.
3: Чтение файла
Теперь вы можете работать с файлом. В зависимости от режима, в котором открыт файл, вы можете выполнить в нём те или иные действия. Для чтения информации Python предлагает три взаимосвязанные операции.
Первая операция – <file>.read(). Она возвращает все содержимое файла в виде одной строки.
Вторая операция – <file>.readline(), которая возвращает содержимое файла построчно.
Прочитав первую строку файла, операция readline при следующем запуске выведет вторую строку.
Третья операция – <file>.readlines(), она возвращает список строк, где строки представлены в виде отдельных элементов.
days_file.readlines()
[‘Mondayn’, ‘Tuesdayn’, ‘Wednesdayn’, ‘Thursdayn’, ‘Fridayn’, ‘Saturdayn’, ‘Sundayn’]
Читая файлы в Python, важно помнить следующее: если файл был прочитан с помощью одной из операций чтения, его нельзя прочитать снова. К примеру, если вы запустили days_file.read(), а затем days_file.readlines(), вторая операция вернёт пустую строку. Потому нужно открывать новую переменную файла всякий раз, когда вы хотите прочитать данные из файла.
4: Запись в файл
Теперь попробуйте создать новый файл, который будет включать заголовок Days of the Week. Сначала создайте переменную title в файле files.py.
title = ‘Days of the Weekn’
Сохраните дни недели в строковой переменной days. Ниже показан код из всех вышеупомянутых разделов (чтобы было понятнее); файл открывается в режиме чтения, выходные данные операции чтения сохраняются в новой переменной days.
path = ‘/users/8host/days.txt’
days_file = open(path,’r’)
days = days_file.read()
В файле есть переменные для заголовка и содержимого файла days. Теперь можно записать данные в новый файл. Сначала укажите местонахождение файла (/users/8host/), затем – название нового файла (например, new_days.txt). Путь к новому файлу можно указать в переменной new_path. Чтобы открыть новый файл для записи, используйте функцию open() с параметром ‘w’.
new_path = ‘/users/8host/new_days.txt’
new_days = open(new_path,’w’)
Примечание: Если файл с таким именем (new_days.txt) уже существует, при открытии в режиме ‘w’ его содержимое пострадает.
Функция откроет файл, после чего вы можете записать в него данные с помощью операции <file>.write(). Операции записи необходим всего один параметр – строка, которую нужно записать в файл. Чтобы начать новую строку в файле, нужно явно использовать символ новой строки. Запишите в файл files.py заголовок и добавьте пару операторов print.
new_days.write(title)
print(title)
new_days.write(days)
print(days)
После этого нужно закрыть файл.
5: Закрытие файла
Операция закрытия файла прерывает соединение между файлом на диске и переменной. Закрытые файлы могут использоваться другими программами, кроме того, это обеспечивает безопасность данных. закрыть файл можно с помощью функции <file>.close(). Добавьте в файл files.py:
6: Проверка кода
Прежде чем запустить сценарий files.py, убедитесь, что его содержимое выглядит так:
path = ‘/users/8host/days.txt’
days_file = open(path,’r’)
days = days_file.read()
new_path = ‘/users/8host/new_days.txt’
new_days = open(new_path,’w’)
title = ‘Days of the Weekn’
new_days.write(title)
print(title)
new_days.write(days)
print(days)
days_file.close()
new_days.close()
Сохраните код, откройте терминал и запустите сценарий Python:
В терминале появится вывод:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Теперь попробуйте открыть файл new_days.txt. Если всё работает должным образом, файл будет выглядеть так:
Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Заключение
Теперь вы умеете обрабатывать и управлять простыми текстовыми файлами в Python 3: открывать и читать файлы, записывать в них новые данные и закрывать их.
Работа с файлами в Питоне
Работа с файлами в Питоне представлена широким набором возможностей. Имеются как встроенные инструменты, так и сторонние модули и библиотеки, позволяющие открывать и читать документы, а также записывать в них любую информацию.
Python умеет взаимодействовать со следующими форматами файлов: txt, jpg, csv, json, html, xlsx, pdf и целым рядом других. Удобство заключается в том, что для каждого случая есть отдельный модуль, ускоряющий разработку.
В данной статье в формате «how to» рассмотрим основной инструментарий для осуществления работы с документами различных типов в Python.
Виртуальная среда под проекты
Язык Python удобен тем, что может взаимодействовать с разными проектами при различных настройках. Как сказал создатель протокола BitTorrent Брэм Коен:
«Питон удобен своей простотой и удобным синтаксисом. Он позволяет инкапсулировать код, имеет широкую поддержку и опциональные параметры»
https://www.inspiringquotes.us/quotes/rHcs_LYZ8MvJh
Важно то, что инкапсуляция работает не только на уровне объектов и классов, но и в масштабах самого языка. Мы можем создавать проекты с отличающимися настройками, и они не будут друг другу «мешать».
Хорошей практикой считается активация виртуальной среды под конкретную проблему. Другими словами, устанавливать библиотеки нужно не глобально, для всей операционной системы, а для отдельного проекта. В этом помогает виртуальное окружение. Прежде чем переходить к написанию кода, нужно сформировать окружение проекта.
В Windows это делается следующим образом (в нужной папке открываем терминал и прописываем команды):
Вначале мы создаем папку виртуального окружения «.venv» (имя может быть любым), а затем активируем ее. Теперь все, что мы установим, будет связано только с данным проектом.
В UNIX-системах (Linux, MacOS) команды будут такими:
Открытие и чтение текстового файла
Для этого в Питоне имеются следующие конструкции:
- Функция open() – открывает документ в виде файлового объекта;
- Функция close() – закрывает файл и удаляет его из оперативной памяти;
- Контекстный менеджер with (автоматически очищает память после работы с файлом). Его синтаксис показан на рисунке ниже.
- Метод read() – считывает документ полностью или частично в виде строки;
- Метод readline() – построчно выводит содержимое объекта;
- Метод readlines() – формирует из строк файла список.
В папке проекта создадим текстовый документ «econ.txt» с таким наполнением:
Писать код будем в IDE PyCharm (среду разработки скачиваем с официального сайта).
Режимы работы с документом
Вторым параметром в функцию open() передается режим работы с файлом. Охарактеризуем их (таблица 1).
Режим | Характеристика |
r | Открыть для чтения |
w | Открыть для записи (если такого документа не существует, то он будет создан) |
a | Дописать новое содержимое в файл в дополнение к имеющемуся |
x | Открыть для записи в несуществующий файл |
t | Представить контент как текст |
+ | Открыть документ как для чтения, так и записи |
b | Представить контент в виде байтов |
Таблица 1 – Режимы открытия файла
Если данный аргумент не передать, то файл по умолчанию будет отображаться в виде текста в режиме чтения. Кодировку указывать всегда обязательно, так как содержимое может предстать в виде нечитаемой «каши» символов.
Запись текстового контента в файл
Питон позволяет дозаписывать данные в документ или наполнить его новой информацией. В режиме «w» файл всегда будет перезаписываться полностью.
Запись текста возможна двумя способами:
- Через функцию write(),
- При помощи функции print().
Первая операция создает файл и записывает в него строчку «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» с таким содержимым:
Теперь считаем их и представим в виде словаря Python.
Как видно, десериализация json-данных осуществляется следующим образом:
- Двойные кавычки преобразованы в одинарные;
- Булево значение false превратилось в False;
- Объект null соответствует значению None в Питоне.
А теперь расширим информацию в документе «my.json», добавив еще одного студента.
Открываем файл в режиме чтения и возможности записи («r+»). Считываем имеющееся в нем содержимое и преобразуем его в словарь. Добавляем новую запись в словарь с ключом «student2». Полностью переписываем содержимое документа с учетом новой информации: делаем отступы (indent=4) для удобства чтения, а также отключаем режим «только ASCII», чтобы появилась возможность вставлять кириллицу.
Запись excel-файлов
Для сохранения табличных данных удобнее всего пользоваться библиотекой csv, так как с этим форматом работать проще, он быстрее, может открываться без наличия Excel на рабочем компьютере.
Конечно, бывают ситуации, когда может потребоваться поработать именно с файлами формата «xlsx», для чего подойдет модуль openpyxl. Сначала установим данную библиотеку, так как она не встроена в Питон по умолчанию:
С ее помощью можно читать и записывать данные в «эксель»-файлы.
Основные инструменты, с которыми будем работать:
- Workbook() – класс для создания табличного файла;
- Create_sheet() – внедрение страницы с определенным именем;
- Save() – сохранение результата в файл;
- Cell() – запись информации в ячейку;
- Get_column_letter() – получение буквенного обозначения колонки.
В результате в созданном файле будем иметь следующее содержимое (рисунок 2).
Рисунок 2 – Результат наполнения xlsx-файла
Также вкладка получит название «Запись».
Файлы операционной системы
Встроенный модуль os позволяет просматривать содержимое каталогов и редактировать его.
Ознакомимся со следующими функциями:
- mkdir() – создание папки в выбранном каталоге;
- walk() – определение списка всех файлов и директорий внутри заданной и ее подпапках;
- remove() – удаление файла из системы;
- rename() – переименование документа и пр.
Приведем несколько примеров работы с библиотекой.
В результате работы программы в папке «temp» окажутся следующие файлы: ‘0.txt’, ‘2.txt’, ‘4.txt’, ‘5.txt’, ‘6.txt’, ‘первый.txt’.
Редактирование изображений в Питоне
Для работы с картинками используют внешний модуль Pillow. Он позволяет создавать и изменять рисунки, а также накладывать на них текст.
В первую очередь следует установить модуль:
Нарисуем квадрат красного цвета с длиной стороны 400 пикселей, применим к нему фильтр размытия, а затем сделаем его черно-белым.
Рисунок 3 – Красный квадрат Рисунок 4 – Размытие картинки Рисунок 5 – Преобразование в черно-белый цвет
Заключение
Мы рассмотрели лишь часть возможностей Питона по работе с файлами. Создание, считывание, вывод в файлы может осуществляться разными способами. Более того, практически все форматы и типы документов могут редактироваться при помощи Python. В зависимости от задачи найти нужный модуль не составит труда.
Ответы на вопросы читателей
Универсальный формат табличной информации – csv (Comma Separated Values, разделенные запятой данные). Его хорошо понимают разные сайты, среды разработки, операционные системы.
Чтобы взаимодействовать с excel-файлами требуется установить модуль openpyxl.
Для работы с Гугл-таблицами нужно получить доступ к программному интерфейсу в качестве разработчика.
Информация на Интернет-ресурсах зачастую представлена в виде json-данных. Она очень напоминает словари (dictionaries) в Питоне. Именно поэтому работать с этим форматом очень удобно.
Он используется для передачи и получения информации между API сайтов и программ.
После создания файлового объекта его можно прочитать полностью и вывести на печать.
Создание/изменение документов MS Word на Python.
Модуль python-docx предназначен для создания и обновления файлов с расширением .docx — Microsoft Word. Этот модуль имеет одну зависимость: сторонний модуль lxml .
Установка модуля python-docx в виртуальное окружение.
Модуль python-docx размещен на PyPI, поэтому установка относительно проста.
Основы работы с файлами Microsoft Word на Python.
- ; ; ; ; ; ;
- Пользовательский стиль символов текста;
- Абзац содержит все форматирование на уровне блока, такое как — отступ, высота строки, табуляции и так далее.
- Форматирование на уровне символов, например полужирный и курсив, применяется на уровне прогона paragraph.add_run() . Все содержимое абзаца должно находиться в пределах цикла, но их может быть больше одного. Таким образом, для абзаца с полужирным словом посередине требуется три прогона: обычный, полужирный — содержащий слово, и еще один нормальный для текста после него.
- .bold : полужирный текст;
- .underline : подчеркнутый текст;
- .italic : курсивный (наклонный) текст;
- .strike : зачеркнутый текст.
Открытие/создание документа.
Первое, что вам понадобится, это документ, над которым вы будете работать. Самый простой способ:
При этом создается пустой документ, основанный на «шаблоне» по умолчанию. Другими словами, происходит примерно то же самое, когда пользователь нажимает на иконку в Microsoft Word «Новый документ» с использованием встроенных значений по умолчанию.
При этом шрифт документа и его размер по умолчанию для всего документа можно задать следующим образом:
Так же, можно открывать существующий документ Word и работать с ним при помощи модуля python-docx . Для этого, в конструктор класса Document() необходимо передать путь к существующему документу Microsoft Word.
Добавление заголовка документа.
В любом документе, основной текст делится на разделы, каждый из которых начинается с заголовка. Название таких разделов можно добавить методом Document.add_heading() :
По умолчанию, добавляется заголовок верхнего уровня, который отображается в Word как «Heading 1». Если нужен заголовок для подраздела, то просто указываем желаемый уровень в виде целого числа от 1 до 9:
Если указать level=0 , то будет добавлен текст с встроенным стилем титульной страницы. Такой стиль может быть полезен для заголовка относительно короткого документа без отдельной титульной страницы.
Так же, заголовки разделов можно добавлять методом document.add_paragraph().add_run() , с указанным размером шрифта.
Добавление абзаца.
Абзацы в Word имеют основополагающее значение. Они используются для добавления колонтитулов, основного текста, заголовков, элементов списков, картинок и т.д.
Смотрим самый простой способ добавить абзац/параграф:
Метод Document.add_paragraph() возвращает ссылку на только что добавленный абзац (объект Paragraph ). Абзац добавляется в конец документа. Эту ссылку можно использовать в качестве своеобразного «курсора» и например, вставить новый абзац прямо над ним:
Такое поведение позволяет вставить абзац в середину документа, это важно при изменении существующего документа, а не при его создании с нуля.
Ссылка на абзац, так же используется для его форматирования встроенными в MS Word стилями или для кастомного/пользовательского форматирования.
Пользовательское форматирование абзаца.
Форматирование абзацев происходит при помощи объекта ParagraphFormat .
Простой способ форматировать абзац/параграф:
Чтобы узнать, какие параметры абзаца еще можно настроить/изменить, смотрите материал «Объект ParagraphFormat «
Очень часто в коде, с возвращенной ссылкой (в данном случае p ) ничего делать не надо, следовательно нет смысла ее присваивать переменной.
Применение встроенного стиля в Microsoft Word к абзацу.
Стиль абзаца — это набор правил форматирования, который заранее определен в Microsoft Word, и храниться в редакторе в качестве переменной. По сути, стиль позволяет сразу применить к абзацу целый набор параметров форматирования.
Можно применить стиль абзаца, прямо при его создании:
В конкретном стиле ‘List Bullet’ , абзац отображается в виде маркера. Также можно применить стиль позже. Две строки, в коде ниже, эквивалентны примеру выше:
Стиль указывается с использованием его имени, в этом примере имя стиля — ‘List’ . Как правило, имя стиля точно такое, как оно отображается в пользовательском интерфейсе Word.
Обратите внимание, что можно установить встроенный стиль прямо на результат document.add_paragraph() , без использования возвращаемого объекта paragraph
Жирный, курсив и подчеркнутый текст в абзаце.
Разберемся, что происходит внутри абзаца:
Когда создается абзац методом Document.add_paragraph() , то передаваемый текст добавляется за один прогон Run . Пустой абзац/параграф можно создать, вызвав этот метод без аргументов. В этом случае, наполнить абзац текстом можно с помощью метода Paragraph.add_run() . Метод абзаца .add_run() можно вызывать несколько раз, тем самым добавляя информацию в конец данного абзаца:
В результате получается абзац, который выглядит так же, как абзац, созданный из одной строки. Если не смотреть на полученный XML, то не очевидно, где текст абзаца разбивается на части. Обратите внимание на конечный пробел в конце первой строки. Необходимо четко указывать, где появляются пробелы в начале и в конце прогона, иначе текст будет слитный (без пробелов). Они (пробелы) автоматически не вставляются между прогонами paragraph.add_run() . Метод paragraph.add_run() возвращает ссылку на объект прогона Run , которую можно использовать, если она нужна.
Объекты прогонов имеют следующие свойства, которые позволяют установить соответствующий стиль:
Получится текст, что то вроде этого: «Абзац содержит форматирование на уровне блока».
Обратите внимание, что можно установить полужирный или курсив прямо на результат paragraph.add_run() , без использования возвращаемого объекта прогона:
Передавать текст в метод Document.add_paragraph() не обязательно. Это может упростить код, если строить абзац из прогонов:
Пользовательское задание шрифта прогона.
Применение стилей Microsoft Word к символам текста (к прогону).
В дополнение к встроенным стилям абзаца, которые определяют группу параметров уровня абзаца, Microsoft Word имеет стили символов, которые определяют группу параметров уровня прогона paragraph.add_run() . Другими словами, можно думать о стиле текста как об указании шрифта, включая его имя, размер, цвет, полужирный, курсив и т. д.
Подобно стилям абзацев, стиль символов текста будет определен в документе, который открывается с помощью вызова Document() (см. Общие сведения о стилях).
Стиль символов можно указать при добавлении нового прогона:
Также можете применить стиль к прогону после его добавления. Этот код дает тот же результат, что и строки выше:
Как и в случае со стилем абзаца, имя стиля текста такое, как оно отображается в пользовательском интерфейсе Word.
Пользовательский стиль символов текста.
Добавление разрыва страницы.
При создании документа, время от времени нужно, чтобы следующий текст выводился на отдельной странице, даже если последняя не заполнена. Жесткий разрыв страницы можно сделать следующим образом:
Если вы обнаружите, что используете это очень часто, это, вероятно, знак того, что вы могли бы извлечь выгоду, лучше разбираясь в стилях абзацев. Одно свойство стиля абзаца, которое вы можете установить, — это разрыв страницы непосредственно перед каждым абзацем, имеющим этот стиль. Таким образом, вы можете установить заголовки определенного уровня, чтобы всегда начинать новую страницу. Подробнее о стилях позже. Они оказываются критически важными для получения максимальной отдачи от Word.
Жесткий разрыв страницы можно привязать к стилю абзаца, и затем применять его для определенных абзацев, которые должны начинаться с новой страницы. Так же можно установить жесткий разрыв на стиль заголовка определенного уровня, чтобы с него всегда начинать новую страницу. В общем, стили, оказываются критически важными для того, чтобы получить максимальную отдачу от модуля python-docx .
Добавление картинки в документ.
Microsoft Word позволяет разместить изображение в документе с помощью пункта меню «Вставить изображение«. Вот как это сделать при помощи модуля python-docx :
В этом примере используется путь, по которому файл изображения загружается из локальной файловой системы. В качестве пути можно использовать файловый объект, по сути, любой объект, который действует как открытый файл. Такое поведение может быть полезно, если изображение извлекается из базы данных или передается по сети.
Размер изображения.
По умолчанию, изображение добавляется с исходными размерами, что часто не устраивает пользователя. Собственный размер рассчитывается как px/dpi . Таким образом, изображение размером 300×300 пикселей с разрешением 300 точек на дюйм появляется в квадрате размером один дюйм. Проблема в том, что большинство изображений не содержат свойства dpi , и по умолчанию оно равно 72 dpi. Следовательно, то же изображение будет иметь одну сторону, размером 4,167 дюйма, что означает половину страницы.
Чтобы получить изображение нужного размера, необходимо указывать его ширину или высоту в удобных единицах измерения, например, в миллиметрах или сантиметрах:
Если указать только одну из сторон, то модуль python-docx использует его для вычисления правильно масштабированного значения другой стороны изображения. Таким образом сохраняется соотношение сторон и изображение не выглядит растянутым.
Классы Mm() и Cm() предназначены для того, чтобы можно было указывать размеры в удобных единицах. Внутри python-docx используются английские метрические единицы, 914400 дюймов. Так что, если просто указать размер, что-то вроде width=2 , то получится очень маленькое изображение. Классы Mm() и Cm() импортируются из подпакета docx.shared . Эти классы можно использовать в арифметике, как если бы они были целыми числами. Так что выражение, width=Mm(38)/thing_count, работает нормально.
Чтение документов Microsoft Word.
В модуле python-docx , структура документа Microsoft Word представлена тремя различными типами данных. На самом верхнем уровне объект Document() представляет собой весь документ. Объект Document() содержит список объектов Paragraph() , которые представляют собой абзацы документа. Каждый из абзацев содержит список, состоящий из одного или нескольких объектов Run() , представляющих собой фрагменты текста с различными стилями форматирования.
Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.
Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).
В Python существует два типа файлов:
- Текстовые
- Бинарные
Текстовые файлы
Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.
Текст может храниться в двух форматах: (.txt
) — простой текст и (.rtf
) — «формат обогащенного текста».
Бинарные файлы
В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.
Они хранятся в формате .bin
.
Любую операцию с файлом можно разбить на три крупных этапа:
- Открытие файла
- Выполнение операции (запись, чтение)
- Закрытие файла
Открытие файла
Метод open()
В Python есть встроенная функция open()
. С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.
Синтаксис следующий:
f = open(file_name, access_mode)
Где,
file_name
= имя открываемого файлаaccess_mode
= режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения (r
), если другое не указано. Далее полный список режимов открытия файла
Режим | Описание |
---|---|
r | Только для чтения. |
w | Только для записи. Создаст новый файл, если не найдет с указанным именем. |
rb | Только для чтения (бинарный). |
wb | Только для записи (бинарный). Создаст новый файл, если не найдет с указанным именем. |
r+ | Для чтения и записи. |
rb+ | Для чтения и записи (бинарный). |
w+ | Для чтения и записи. Создаст новый файл для записи, если не найдет с указанным именем. |
wb+ | Для чтения и записи (бинарный). Создаст новый файл для записи, если не найдет с указанным именем. |
a | Откроет для добавления нового содержимого. Создаст новый файл для записи, если не найдет с указанным именем. |
a+ | Откроет для добавления нового содержимого. Создаст новый файл для чтения записи, если не найдет с указанным именем. |
ab | Откроет для добавления нового содержимого (бинарный). Создаст новый файл для записи, если не найдет с указанным именем. |
ab+ | Откроет для добавления нового содержимого (бинарный). Создаст новый файл для чтения записи, если не найдет с указанным именем. |
Пример
Создадим текстовый файл example.txt
и сохраним его в рабочей директории.
Следующий код используется для его открытия.
f = open('example.txt','r') # открыть файл из рабочей директории в режиме чтения
fp = open('C:/xyz.txt','r') # открыть файл из любого каталога
В этом примере f
— переменная-указатель на файл example.txt
.
Следующий код используется для вывода содержимого файла и информации о нем.
>>> print(*f) # выводим содержимое файла
This is a text file.
>>> print(f) # выводим объект
<_io.TextIOWrapper name='example.txt' mode='r' encoding='cp1252'>
Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252
, а в Linux — utf-08
.
Закрытие файла
Метод close()
После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.
Существуют следующие способы:
Способ №1
Проще всего после открытия файла закрыть его, используя метод close()
.
f = open('example.txt','r')
# работа с файлом
f.close()
После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.
Способ №2
Также можно написать try/finally
, которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.
Без него программа завершается некорректно.
Вот как сделать это исключение:
f = open('example.txt','r')
try:
# работа с файлом
finally:
f.close()
Файл нужно открыть до инструкции
try
, потому что если инструкцияopen
сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.
Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.
Способ №3
Инструкция with
Еще один подход — использовать инструкцию with
, которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.
В таком случае инструкция close
не нужна, потому что with
автоматически закроет файл.
Вот как это реализовать в коде.
with open('example.txt') as f:
# работа с файлом
Чтение и запись файлов в Python
В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.
Функция read()
Функция read()
используется для чтения содержимого файла после открытия его в режиме чтения (r
).
Синтаксис
file.read(size)
Где,
file
= объект файлаsize
= количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.
Пример
>>> f = open('example.txt','r')
>>> f.read(7) # чтение 7 символов из example.txt
'This is '
Интерпретатор прочитал 7 символов файла и если снова использовать функцию read()
, то чтение начнется с 8-го символа.
>>> f.read(7) # чтение следующих 7 символов
' a text'
Функция readline()
Функция readline()
используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.
Пример
Создадим файл test.txt
с нескольким строками:
This is line1.
This is line2.
This is line3.
Посмотрим, как функция readline()
работает в test.txt
.
>>> x = open('test.txt','r')
>>> x.readline() # прочитать первую строку
This is line1.
>>> x.readline(2) # прочитать вторую строку
This is line2.
>>> x.readlines() # прочитать все строки
['This is line1.','This is line2.','This is line3.']
Обратите внимание, как в последнем случае строки отделены друг от друга.
Функция write()
Функция write()
используется для записи в файлы Python, открытые в режиме записи.
Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.
Синтаксис
file.write(string)
Пример
Предположим, файла xyz.txt
не существует. Он будет создан при попытке открыть его в режиме чтения.
>>> f = open('xyz.txt','w') # открытие в режиме записи
>>> f.write('Hello n World') # запись Hello World в файл
Hello
World
>>> f.close() # закрытие файла
Переименование файлов в Python
Функция rename()
Функция rename()
используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.
Синтаксис следующий.
import os
os.rename(src,dest)
Где,
src
= файл, который нужно переименоватьdest
= новое имя файла
Пример
>>> import os
>>> # переименование xyz.txt в abc.txt
>>> os.rename("xyz.txt","abc.txt")
Текущая позиция в файлах Python
В Python возможно узнать текущую позицию в файле с помощью функции tell()
. Таким же образом можно изменить текущую позицию командой seek()
.
Пример
>>> f = open('example.txt') # example.txt, который мы создали ранее
>>> f.read(4) # давайте сначала перейдем к 4-й позиции
This
>>> f.tell() # возвращает текущую позицию
4
>>> f.seek(0,0) # вернем положение на 0 снова
Методы файла в Python
file.close() |
закрывает открытый файл |
file.fileno() |
возвращает целочисленный дескриптор файла |
file.flush() |
очищает внутренний буфер |
file.isatty() |
возвращает True, если файл привязан к терминалу |
file.next() |
возвращает следующую строку файла |
file.read(n) |
чтение первых n символов файла |
file.readline() |
читает одну строчку строки или файла |
file.readlines() |
читает и возвращает список всех строк в файле |
file.seek(offset[,whene]) | устанавливает текущую позицию в файле |
file.seekable() |
проверяет, поддерживает ли файл случайный доступ. Возвращает True , если да |
file.tell() |
возвращает текущую позицию в файле |
file.truncate(n) |
уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции |
file.write(str) |
добавляет строку str в файл |
file.writelines(sequence) |
добавляет последовательность строк в файл |
In this article, we are going to replace Text in a File using Python. Replacing Text could be either erasing the entire content of the file and replacing it with new text or it could mean modifying only specific words or sentences within the existing text.
Method 1: Removing all text and write new text in the same file
In this method we replacing all the text stored in the text file, for this, we will open the file in reading and writing mode and it will rewrite all the text.
Python3
s
=
input
(
"Enter text to replace the existing contents:"
)
f
=
open
(
"file.txt"
,
"r+"
)
f.truncate(
0
)
f.write(s)
f.close()
print
(
"Text successfully replaced"
)
Output:
Enter text to replace the existing contents: Geeks Text successfully replaced
Method 2: Using Replace function in for loop
The simple for loop is a conventional way to traverse through every line in the given text file and find the line we want to replace. Then, the desired line can be replaced by using the replace() function. Finally, the file is opened in the write mode, and the replaced content is written in the given file.
Python3
x
=
input
(
"enter text to be replaced:"
)
y
=
input
(
"enter text that will replace:"
)
f
=
open
(
"file.txt"
,
"r+"
)
l
=
f.readlines()
c
=
0
for
i
in
l:
if
x
in
i:
Replacement
=
i.replace(x, y)
l
=
Replacement
c
+
=
1
f.truncate(
0
)
f.writelines(l)
f.close()
print
(
"Text successfully replaced"
)
Output:
Enter text to be replaced: Geeks Enter text that will replace: Geekforgeeks Text successfully replaced
Method 3: Using the OS module to replace the file with new text
We use the os module to rename a new file with the original file name. In this method instead of editing the already existing file, we instead create a new file with the modified content and then delete the old file and rename the new file.
Python
import
os
x
=
input
(
"Enter text that will replace the existing text:"
)
f
=
open
(
"file.txt"
,
"r+"
)
f1
=
open
(
"new.txt"
,
"r+"
)
f1.write(x)
os.remove(
"file.txt"
)
os.rename(
"new.txt"
,
"file.txt"
)
f1.close()
print
(
"File replaced"
)
Output:
Enter text that will replace the existing text: geeks File replaced
Method 4: Using fileinput.input()
The fileinput.input() method gets the file as the input line by line and is mainly utilized for appending and updating the data in the given file. The fileinput and sys module need to be imported to the current Python code in order to run the code without any errors. The following code uses the fileinput.input() function for replacing the text in a line in Python.
Python3
import
sys
import
fileinput
x
=
input
(
"Enter text to be replaced:"
)
y
=
input
(
"Enter replacement text"
)
for
l
in
fileinput.
input
(files
=
"file.txt"
):
l
=
l.replace(x, y)
sys.stdout.write(l)
Output:
Enter text to be replaced: Geeks Enter replacement text: Geeksforgeeks
In this article, we are going to replace Text in a File using Python. Replacing Text could be either erasing the entire content of the file and replacing it with new text or it could mean modifying only specific words or sentences within the existing text.
Method 1: Removing all text and write new text in the same file
In this method we replacing all the text stored in the text file, for this, we will open the file in reading and writing mode and it will rewrite all the text.
Python3
s
=
input
(
"Enter text to replace the existing contents:"
)
f
=
open
(
"file.txt"
,
"r+"
)
f.truncate(
0
)
f.write(s)
f.close()
print
(
"Text successfully replaced"
)
Output:
Enter text to replace the existing contents: Geeks Text successfully replaced
Method 2: Using Replace function in for loop
The simple for loop is a conventional way to traverse through every line in the given text file and find the line we want to replace. Then, the desired line can be replaced by using the replace() function. Finally, the file is opened in the write mode, and the replaced content is written in the given file.
Python3
x
=
input
(
"enter text to be replaced:"
)
y
=
input
(
"enter text that will replace:"
)
f
=
open
(
"file.txt"
,
"r+"
)
l
=
f.readlines()
c
=
0
for
i
in
l:
if
x
in
i:
Replacement
=
i.replace(x, y)
l
=
Replacement
c
+
=
1
f.truncate(
0
)
f.writelines(l)
f.close()
print
(
"Text successfully replaced"
)
Output:
Enter text to be replaced: Geeks Enter text that will replace: Geekforgeeks Text successfully replaced
Method 3: Using the OS module to replace the file with new text
We use the os module to rename a new file with the original file name. In this method instead of editing the already existing file, we instead create a new file with the modified content and then delete the old file and rename the new file.
Python
import
os
x
=
input
(
"Enter text that will replace the existing text:"
)
f
=
open
(
"file.txt"
,
"r+"
)
f1
=
open
(
"new.txt"
,
"r+"
)
f1.write(x)
os.remove(
"file.txt"
)
os.rename(
"new.txt"
,
"file.txt"
)
f1.close()
print
(
"File replaced"
)
Output:
Enter text that will replace the existing text: geeks File replaced
Method 4: Using fileinput.input()
The fileinput.input() method gets the file as the input line by line and is mainly utilized for appending and updating the data in the given file. The fileinput and sys module need to be imported to the current Python code in order to run the code without any errors. The following code uses the fileinput.input() function for replacing the text in a line in Python.
Python3
import
sys
import
fileinput
x
=
input
(
"Enter text to be replaced:"
)
y
=
input
(
"Enter replacement text"
)
for
l
in
fileinput.
input
(files
=
"file.txt"
):
l
=
l.replace(x, y)
sys.stdout.write(l)
Output:
Enter text to be replaced: Geeks Enter replacement text: Geeksforgeeks
Высокоуровневый язык Python 3 имеет множество полезных средств, позволяющих взаимодействовать с текстовыми файлами. Вы можете как создавать документы для хранения информации, так и выполнять чтение, запись и удаление данных. Сегодня поговорим о создании и записи файлов.
Создание файла, его открытие и закрытие
Работа с текстовым файлом в Python начинается с момента вызова функции open. Она принимает в качестве атрибутов путь к объекту на ПК и режим обработки. Вы можете указать абсолютный путь (это адрес размещения на жёстком диске) или относительный (речь идёт о координатах относительно папки проекта).
Что касается режима обработки файла, то при его выборе учитывайте его назначение («r» — для чтения, «w» — для записи). Таблица ниже позволит вам ознакомиться с режимами доступа к файлу в Python:
А вот пример простейшего взаимодействия с текстовым документом:
file = open("otus.txt", "w") file.write("hello world") file.close()Здесь функция open принимает относительный путь, открывая его для записи. При этом, если в папке файл otus.txt будет отсутствовать, метод open создает его автоматически, после чего откроет для него нужный режим обработки.
Метод close закрывает файл, а это необходимо сделать, выполнив нужные вам действия с переменной file (иначе потеряете информацию). Впрочем, можно обойтись и без close, используя связку операторов with as (переменная, которая ссылается на файл, должна быть прописана после конструкции):
with open("otus.txt", "w") as file: file.write("hello world")Метод write() для записи в файл в Python
В предыдущих примерах мы уже использовали метод write(). Он позволяет записывать любую строку в открытый файл. Помните, что строки в Python способны содержать не только текст, но и двоичные данные.
Запись в файл построчно выполняется посредством записи нужной вам строки с последующей записью n— символа перевода строки.
Давайте ещё раз посмотрим на запись в файл с помощью метода write().
Синтаксис:Пример использования:
my_file = open("otus.txt", "w") my_file.write("Люблю Python!nЭто крутой язык!") my_file.close()Код, представленный выше, создаст файл otus.txt , записав в него указанную строку.
Давайте теперь выполним запись списка поэлементно, где каждый элемент списка будет записан в новой строке:
lines = ["one", "two", "three"] with open(r"C:otus.txt", "w") as file: for line in lines: file.write(line + 'n')Этот код позволит создать небольшой массив lines, содержащий три строковых элемента: «one», «two» и «three». Благодаря функции open и связке операторов with as произойдёт открытие текстового файла otus.txt в корневом каталоге жёсткого диска C. Далее произойдёт запись всех элементов списка с помощью write. Символ n обеспечит, чтобы каждая запись была выполнена с новой строки.
На чтение 13 мин. Просмотров 4k. Опубликовано 9 мая, 2021
Работа с файлами в Питоне представлена широким набором возможностей. Имеются как встроенные инструменты, так и сторонние модули и библиотеки, позволяющие открывать и читать документы, а также записывать в них любую информацию.
Python умеет взаимодействовать со следующими форматами файлов: txt, jpg, csv, json, html, xlsx, pdf и целым рядом других. Удобство заключается в том, что для каждого случая есть отдельный модуль, ускоряющий разработку.
В данной статье в формате «how to» рассмотрим основной инструментарий для осуществления работы с документами различных типов в Python.
Содержание
- Виртуальная среда под проекты
- Открытие и чтение текстового файла
- Режимы работы с документом
- Запись текстового контента в файл
- Чтение и запись json-файлов
- Запись excel-файлов
- Файлы операционной системы
- Редактирование изображений в Питоне
- Заключение
- Ответы на вопросы читателей
- Источники
Виртуальная среда под проекты
Язык Python удобен тем, что может взаимодействовать с разными проектами при различных настройках. Как сказал создатель протокола BitTorrent Брэм Коен:
«Питон удобен своей простотой и удобным синтаксисом. Он позволяет инкапсулировать код, имеет широкую поддержку и опциональные параметры»
https://www.inspiringquotes.us/quotes/rHcs_LYZ8MvJh
Важно то, что инкапсуляция работает не только на уровне объектов и классов, но и в масштабах самого языка. Мы можем создавать проекты с отличающимися настройками, и они не будут друг другу «мешать».
Хорошей практикой считается активация виртуальной среды под конкретную проблему. Другими словами, устанавливать библиотеки нужно не глобально, для всей операционной системы, а для отдельного проекта. В этом помогает виртуальное окружение. Прежде чем переходить к написанию кода, нужно сформировать окружение проекта.
В Windows это делается следующим образом (в нужной папке открываем терминал и прописываем команды):
py -m venv .venv
.venvScriptsactivate
Вначале мы создаем папку виртуального окружения «.venv» (имя может быть любым), а затем активируем ее. Теперь все, что мы установим, будет связано только с данным проектом.
В UNIX-системах (Linux, MacOS) команды будут такими:
python3 -m venv .venv
source .venvbinactivate
Открытие и чтение текстового файла
Для этого в Питоне имеются следующие конструкции:
- Функция 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 имеется 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. В зависимости от задачи найти нужный модуль не составит труда.
Ответы на вопросы читателей
Сколько времени потребуется на изучение Питона?
При постоянной практике и достаточном ежедневном внимании к языку 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. Позволяет решать задачи: извлекать сведения о картинке; менять размеры, обрезать, поворачивать; накладывать фильтры на рисунки (размытие, повышение контраста и др.); добавлять текстовые надписи; создавать изображения.
Источники
- Документация по библиотеке 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, чтобы получать свежие статьи своевременно!
Текстовые файлы
Последнее обновление: 21.06.2017
Запись в текстовый файл
Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись) или a (дозапись). Затем для записи применяется метод write(str),
в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их
предварительно нужно конвертировать в строку.
Запишем некоторую информацию в файл «hello.txt»:
with open("hello.txt", "w") as file: file.write("hello world")
Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл hello.txt. Этот файл можно открыть в любом текстовом редакторе и при желании изменить.
Теперь дозапишем в этот файл еще одну строку:
with open("hello.txt", "a") as file: file.write("ngood bye, world")
Дозапись выглядит как добавление строку к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность «n».
В итоге файл hello.txt будет иметь следующее содержимое:
hello world good bye, world
Еще один способ записи в файл представляет стандартный метод print(), который применяется для вывода данных на консоль:
with open("hello.txt", "a") as hello_file: print("Hello, world", file=hello_file)
Для вывода данных в файл в метод print в качестве второго параметра передается название файла через параметр file. А первый параметр представляет записываемую
в файл строку.
Чтение файла
Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами:
-
readline(): считывает одну строку из файла
-
read(): считывает все содержимое файла в одну строку
-
readlines(): считывает все строки файла в список
Например, считаем выше записанный файл построчно:
with open("hello.txt", "r") as file: for line in file: print(line, end="")
Несмотря на то, что мы явно не применяем метод readline()
для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается
для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. И поскольку строки разделяются символом перевода строки «n», то чтобы исключить излишнего переноса на другую строку в функцию
print передается значение end=""
.
Теперь явным образом вызовем метод readline()
для чтения отдельных строк:
with open("hello.txt", "r") as file: str1 = file.readline() print(str1, end="") str2 = file.readline() print(str2)
Консольный вывод:
hello world good bye, world
Метод readline можно использовать для построчного считывания файла в цикле while:
with open("hello.txt", "r") as file: line = file.readline() while line: print(line, end="") line = file.readline()
Если файл небольшой, то его можно разом считать с помощью метода read():
with open("hello.txt", "r") as file: content = file.read() print(content)
И также применим метод readlines() для считывания всего файла в список строк:
with open("hello.txt", "r") as file: contents = file.readlines() str1 = contents[0] str2 = contents[1] print(str1, end="") print(str2)
При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью
параметра encoding:
filename = "hello.txt" with open(filename, encoding="utf8") as file: text = file.read()
Теперь напишем небольшой скрипт, в котором будет записывать введенный пользователем массив строк и считывать его обратно из файла на консоль:
# имя файла FILENAME = "messages.txt" # определяем пустой список messages = list() for i in range(4): message = input("Введите строку " + str(i+1) + ": ") messages.append(message + "n") # запись списка в файл with open(FILENAME, "a") as file: for message in messages: file.write(message) # считываем сообщения из файла print("Считанные сообщения") with open(FILENAME, "r") as file: for message in file: print(message, end="")
Пример работы программы:
Введите строку 1: hello Введите строку 2: world peace Введите строку 3: great job Введите строку 4: Python Считанные сообщения hello world peace great job Python
·
Abdou Rockikz
·
4 min read
· Updated
jun 2022
· General Python Tutorials
In this tutorial, we will make a simple command-line program that we can supply with a .docx
file path and words that need replacing.
Imports
We start with the Imports.
The re
library is essential here because we can use its sub()
function to replace certain expressions with other text in a given string.
We also need the sys
module so we can get the command line arguments with sys.argv
.
Last but not least, we also get the Document
class from docx
so we can work with word files. We have to download it first with:
$ pip install python-docx
Let’s get started:
# Import re for regex functions
import re
# Import sys for getting the command line arguments
import sys
# Import docx to work with .docx files.
# Must be installed: pip install python-docx
from docx import Document
Checking Command Line Arguments
Next, we get to the command line arguments. We want to check if the inputs are valid.
Now if the sys.argv
list is shorter than three items, we know that the user didn’t provide enough information. The first argument is always the file path of the Python file itself. The second one should be the file path of the file where the text will be replaced.
The rest of the arguments will be pairs like this text=replacewith
which tells us what we replace with what. That’s what we check in the for
loop.
In the end, we also save the file path to a variable, so we don’t have to type out sys.argv[1]
every time.
# Check if Command Line Arguments are passed.
if len(sys.argv) < 3:
print('Not Enough arguments where supplied')
sys.exit()
# Check if replacers are in a valid schema
for replaceArg in sys.argv[2:]:
if len(replaceArg.split('=')) != 2:
print('Faulty replace argument given')
print('-> ', replaceArg)
sys.exit()
# Store file path from CL Arguments.
file_path = sys.argv[1]
Docx Files
If the file ends with .docx
we know we have to use the docx
class. We first make a new Document
object which we will provide with our file path. Then we loop over the replacement arguments just like for the .txt
files.
After that, we loop through the document’s paragraphs right before looping through the runs of the paragraphs. These runs represent the style spans of the document; we replace the text and then simply save the document with the save()
method.
if file_path.endswith('.docx'):
doc = Document(file_path)
# Loop through replacer arguments
occurences = {}
for replaceArgs in sys.argv[2:]:
# split the word=replacedword into a list
replaceArg = replaceArgs.split('=')
# initialize the number of occurences of this word to 0
occurences[replaceArg[0]] = 0
# Loop through paragraphs
for para in doc.paragraphs:
# Loop through runs (style spans)
for run in para.runs:
# if there is text on this run, replace it
if run.text:
# get the replacement text
replaced_text = re.sub(replaceArg[0], replaceArg[1], run.text, 999)
if replaced_text != run.text:
# if the replaced text is not the same as the original
# replace the text and increment the number of occurences
run.text = replaced_text
occurences[replaceArg[0]] += 1
# print the number of occurences of each word
for word, count in occurences.items():
print(f"The word {word} was found and replaced {count} times.")
# make a new file name by adding "_new" to the original file name
new_file_path = file_path.replace(".docx", "_new.docx")
# save the new docx file
doc.save(new_file_path)
else:
print('The file type is invalid, only .docx are supported')
Let’s run it on this document file:
$ python docx_text_replacer.py doc.docx SYN=TEST Linux=Windows TCP=UDP
The word SYN was found and replaced 5 times.
The word Linux was found and replaced 1 times.
The word TCP was found and replaced 1 times.
I wanted to replace the «SYN» word with «TEST», «Linux» with «Windows», and «TCP» with «UDP» on the document, and it was successful!
Conclusion
Excellent! You have successfully created a file replacement program using Python code! See how you can add more features to this program, such as adding more file formats.
Get the complete code here.
Learn also: How to Convert PDF to Docx in Python.
Happy coding ♥
View Full Code
Read Also