Чтение и запись файлов MS Word с помощью модуля Python-Docx
В этой статье вы узнаете, как в Python считывать и записывать файлы MS Word.
Установка библиотеки Python-Docx
Существует несколько библиотек, которые можно использовать для чтения и записи в Python файлов MS Word. Мы будем использовать модуль python-docx .
Выполните приведенную ниже pip команду в терминале, чтобы загрузить модуль python-docx:
$ pip install python-docx
Чтение файлов MS Word с помощью модуля Python-Docx
Создайте новый файл MS Word и переименуйте его в my_word_file.docx. Я сохранил файл в корне диска E. Файл my_word_file.docx должен иметь следующее содержимое

Чтобы считать указанный файл, импортируйте модуль docx, а затем создайте объект класса Document из модуля docx. Затем передайте путь к файлу my_word_file.docx в конструктор класса Document:
import docx
doc = docx.Document("E:/my_word_file.docx")
Объект doc класса Document теперь можно использовать для чтения содержимого файла my_word_file.docx.
Чтение параграфов
С помощью объекта класса Document и пути к файлу можно получить доступ ко всем абзацам документа с помощью атрибута paragraphs. Пустая строка также читается как абзац.
Извлечем все абзацы из файла my_word_file.docx и затем отобразим общее количество абзацев документа:
all_paras = doc.paragraphs
len(all_paras)
Вывод:
10
Теперь поочередно выведем все абзацы, присутствующие в файле my_word_file.docx:
for para in all_paras:
print(para.text)
print("-------")
Вывод:
-------
Introduction
-------
-------
Welcome to stackabuse.com
-------
The best site for learning Python and Other Programming Languages
-------
Learn to program and write code in the most efficient manner
-------
-------
Details
-------
-------
This website contains useful programming articles for Java, Python, Spring etc.
-------
Вывод демонстрирует все абзацы, присутствующие в файле my_word_file.docx.
Также можно получить доступ к определенному абзацу, индексируя свойство paragraphs как массив. Давайте выведем пятый абзац в файле:
single_para = doc.paragraphs[4]
print(single_para.text)
Вывод:
The best site for learning Python and Other Programming Languages
Чтение прогонов
Прогон в текстовом документе представляет собой непрерывную последовательность слов, имеющих схожие свойства. Например, одинаковые размеры шрифта, формы шрифта и стили шрифта.
Вторая строка файла my_word_file.docx содержит текст «Welcome to stackabuse.com». Слова «Welcome to» написаны простым шрифтом, а текст «stackabuse.com» - жирным. Следовательно, текст «Welcome to» считается одним прогоном, а текст, выделенный жирным шрифтом «stackabuse.com», считается другим прогоном.
Чтобы получить все прогоны в абзаце, можно использовать свойство run атрибута paragraphобъекта doc.
Считаем все прогоны из абзаца №5 (четвертый указатель) в тексте:
single_para = doc.paragraphs[4]
for run in single_para.runs:
print(run.text)
Вывод:
The best site for
learning Python
and Other
Programming Languages
Аналогичным образом приведенный ниже скрипт выводит все прогоны из 6-го абзаца файла my_word_file.docx:
second_para = doc.paragraphs[5]
for run in second_para.runs:
print(run.text)
Вывод:
Learn to program and write code in the
most efficient manner
Написание файлов MS Word с помощью модуля Python-Docx
Чтобы записать файлы MS Word, создайте объект класса Document с пустым конструктором.
mydoc = docx.Document()
Запись абзацев
Для записи абзацев используйте метод add_paragraph() объекта класса Document. После добавления абзаца нужно вызвать метод save(). Путь к файлу, в который нужно записать абзац, передается в качестве параметра методу save(). Если файл не существует, то будет создан новый файл. Иначе абзац будет добавлен в конец существующего файла MS Word.
Приведенный ниже скрипт записывает простой абзац во вновь созданный файл my_written_file.docx.
mydoc.add_paragraph("This is first paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")
После выполнения этого скрипта вы должны увидеть новый файл my_written_file.docx в каталоге, который указали в методе save(). Внутри файла должен быть один абзац, который гласит: «This is first paragraph of a MS Word file.».
Добавим в файл my_written_file.docx еще один абзац:
mydoc.add_paragraph("This is the second paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")
Этот абзац будет добавлен в конец файла my_written_file.docx.
Запись прогонов
Вы также можете записать прогоны с помощью модуля python-docx. Для этого нужно создать дескриптор абзаца, к которому хотите добавить прогон:
third_para = mydoc.add_paragraph("This is the third paragraph.")
third_para.add_run(" this is a section at the end of third paragraph")
mydoc.save("E:/my_written_file.docx")
В приведенном выше скрипте записывается абзац с помощью метода add_paragraph()объекта mydoc класса Document. Метод add_paragraph() возвращает дескриптор для вновь добавленного пункта.
Чтобы добавить прогон к новому абзацу, необходимо вызвать метод add_run() для дескриптора абзаца. Текст прогона передается в виде строки в метод add_run(). Затем необходимо вызвать метод save() для создания фактического файла.
Запись заголовков
В файлы MS Word также можно добавлять заголовки. Для этого нужно вызвать метод add_heading(). Первым параметром метода add_heading() является текстовая строка для заголовка, а вторым – размер заголовка.
Приведенный ниже скрипт добавляет в файл my_written_file.docx три заголовка уровня 0, 1 и 2:
mydoc.add_heading("This is level 1 heading", 0)
mydoc.add_heading("This is level 2 heading", 1)
mydoc.add_heading("This is level 3 heading", 2)
mydoc.save("E:/my_written_file.docx")
Добавление изображений
Чтобы добавить в файлы MS Word изображения, используется метод add_picture(). Путь к изображению передается как параметр метода add_picture(). Также можно указать ширину и высоту изображения с помощью атрибута docx.shared.Inches().
Приведенный ниже скрипт добавляет изображение из локальной файловой системы в файл my_written_file.docx. Ширина и высота изображения будут 5 и 7 дюймов:
mydoc.add_picture("E:/eiffel-tower.jpg", width=docx.shared.Inches(5), height=docx.shared.Inches(7))
mydoc.save("E:/my_written_file.docx")
После выполнения всех скриптов, рассмотренных в этой статье, окончательный файл my_written_file.docx должен выглядеть следующим образом:

Он должен содержать три абзаца, три заголовка и одно изображение.
Заключение
И этой статьи вы узнали, как читать и записывать файлы MS Word с помощью модуля python-docx.