Рубрики
Без рубрики

Чтение и запись файлов MS Word на Python с помощью модуля Python-Docx

В статье объясняется, как читать и писать файлы MS Word с помощью модуля Python-Docx с помощью различных примеров.

Автор оригинала: Usman Malik.

Утилита MS Word из пакета Microsoft Office является одним из наиболее часто используемых инструментов для написания текстовых документов, как простых, так и сложных. Хотя люди могут легко читать и писать документы MS Word, предполагая, что у вас установлено офисное программное обеспечение, часто вам нужно читать текст из документов Word в другом приложении.

Например, если вы разрабатываете приложение для обработки естественного языка на Python, которое принимает файлы MS Word в качестве входных данных, вам нужно будет прочитать файлы MS Word на Python, прежде чем вы сможете обработать текст. Точно так же часто вам нужно записывать текст в документы MS Word в качестве выходных данных, которые могут быть динамически сгенерированным отчетом для загрузки, например.

В этой статье вы увидите, как читать и писать файлы MS Word на Python.

Установка библиотеки Python-Docx

Существует несколько библиотек, которые можно использовать для чтения и записи файлов MS Word на Python. Однако мы будем использовать модуль python-docx из-за его простоты использования. Выполните следующую команду pip в вашем терминале, чтобы загрузить модуль python-docx , как показано ниже:

$ pip install python-docx

Чтение файлов MS Word с помощью модуля Python-Docx

В этом разделе вы увидите, как читать текст из файлов MS Word с помощью модуля python-docx .

Создайте новый файл MS Word и переименуйте его как “my_word_file.docx”. Я сохранил файл в корне моего каталога “E”, хотя вы можете сохранить его где угодно. В my_word_file.docx файл должен иметь следующее содержимое:

чтение файлов ms word на python

Чтобы прочитать вышеприведенный файл, сначала импортируйте модуль docx , а затем создайте объект класса Document из модуля docx . Пройдите по пути my_word_file.docx к конструктору класса Document , как показано в следующем скрипте:

import docx

doc = docx.Document("E:/my_word_file.docx")

Объект класса Document class dock теперь можно использовать для чтения содержимого 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.
-------

Выходные данные показывают все абзацы в файле Word.

Мы даже можем получить доступ к определенному абзацу, индексируя свойство paragraphs как массив. Давайте напечатаем 5-й абзац в файле:

single_para = doc.paragraphs[4]
print(single_para.text)

Выход:

The best site for learning Python and Other Programming Languages

Чтение Работает

Запуск в документе Word-это непрерывная последовательность слов, имеющих сходные свойства, такие как одинаковые размеры шрифта, формы шрифта и стили шрифта. Например, если вы посмотрите на вторую строку my_word_file.docx, он содержит текст “Добро пожаловать в stackabuse.com”, здесь текст “Добро пожаловать” написан простым шрифтом, в то время как текст “stackabuse.com-это в смелом лице. Следовательно, текст “Добро пожаловать” рассматривается как один прогон, в то время как жирный текст “stackabuse.com” рассматривается как еще один пробег.

Точно так же “Научиться программировать и писать код наиболее эффективным способом” и “наиболее эффективным способом” рассматриваются как два разных запуска в параграфе “Научиться программировать и писать код наиболее эффективным способом”.

Чтобы получить все прогоны в абзаце, вы можете использовать свойство run атрибута paragraph объекта doc .

Давайте прочитаем все прогоны из абзаца № 5 (4-й индекс) в нашем тексте:

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 на Python с помощью модуля python-docx . В этом разделе вы увидите, как писать файлы MS Word с помощью модуля python-docx .

Для записи файлов MS Word необходимо создать объект класса Document с пустым конструктором или без передачи имени файла.

mydoc = docx.Document()

Написание абзацев

Для написания абзацев можно использовать метод add_paragraph() объекта класса Document . После добавления абзаца вам нужно будет вызвать метод save() для объекта класса Document . Путь к файлу, в который вы хотите записать свой абзац, передается в качестве параметра методу save () . Если файл еще не существует, будет создан новый файл, в противном случае абзац будет добавлен в конце существующего файла MS Word.

Следующий сценарий записывает простой абзац во вновь созданный файл 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 () . Внутри файла вы должны увидеть один абзац, который гласит: “Это первый абзац файла MS Word.”

Давайте добавим еще один абзац к 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() объекта класса Document mydoc . Метод add_paragraph() возвращает дескриптор для вновь добавленного абзаца. Чтобы добавить запуск в новый абзац, вам нужно вызвать метод add_run() на дескрипторе абзаца. Текст для запуска передается в виде строки в метод add_run () . Наконец, вам нужно вызвать метод save () , чтобы создать фактический файл.

Написание Заголовков

Вы также можете добавлять заголовки в файлы MS Word. Для этого вам нужно вызвать метод add_heading () . Первый параметр метода add_heading () – это текстовая строка заголовка, а второй параметр-размер заголовка. Размеры заголовков начинаются с 0, причем 0 – это заголовок верхнего уровня.

Следующий сценарий добавляет в файл три заголовка уровня 0, 1 и 2 my_written_file.docx:

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 Файл Word. Ширина и высота изображения будут составлять 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")

После выполнения всех сценариев в разделе Написание файлов MS Word с помощью модуля Python-Docx этой статьи ваш окончательный my_written_file.docx файл должен выглядеть так:

написание файлов ms word на python

В выходных данных вы можете увидеть три абзаца, добавленные в файл MS Word, а также три заголовка и одно изображение.

Вывод

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