Работа с документами microsoft office в python: Web-разработка • Python и Flask

Содержание

Web-разработка • Python и Flask


С помощью модуля python-docx можно создавать и изменять документы MS Word с расширением .docx. Чтобы установить этот модуль, выполняем команду

> pip install python-docx


При установке модуля надо вводить python-docx, а не docx (это другой модуль). В то же время при импортировании модуля python-docx следует использовать import docx, а не import python-docx.

Чтение документов MS Word


Файлы с расширением .docx обладают развитой внутренней структурой. В модуле python-docx эта структура представлена тремя различными типами данных. На самом верхнем уровне объект Document представляет собой весь документ. Объект Document содержит список объектов Paragraph, которые представляют собой абзацы документа. Каждый из абзацев содержит список, состоящий из одного или нескольких объектов Run, представляющих собой фрагменты текста с различными стилями форматирования.

import docx

doc = docx.Document('example.docx')

# количество абзацев в документе
print(len(doc.paragraphs))

# текст первого абзаца в документе
print(doc.paragraphs[0].text)

# текст второго абзаца в документе
print(doc.paragraphs[1].text)

# текст первого Run второго абзаца
print(doc.paragraphs[1].runs[0].text)
6
Название документа
Простой абзац с жирным и курсивным текстом
Простой абзац с 


Получаем весь текст из документа:

text = []
for paragraph in doc.paragraphs:
    text.append(paragraph.text)
print('\n'.join(text))
Название документа
Простой абзац с жирным и курсивным текстом
Заголовок, уровень 1
Выделенная цитата
Первый элемент маркированного списка
Первый элемент нумерованного списка

Стилевое оформление


В документах MS Word применяются два типа стилей: стили абзацев, которые могут применяться к объектам Paragraph, стили символов, которые могут применяться к объектам Run. Как объектам Paragraph, так и объектам Run можно назначать стили, присваивая их атрибутам style значение в виде строки. Этой строкой должно быть имя стиля. Если для стиля задано значение None, то у объекта Paragraph или Run не будет связанного с ним стиля.

Стили абзацев
  • Normal
  • Body Text
  • Body Text 2
  • Body Text 3
  • Caption
  • Heading 1
  • Heading 2
  • Heading 3
  • Heading 4
  • Heading 5
  • Heading 6
  • Heading 7
  • Heading 8
  • Heading 9
  • Intense Quote
  • List
  • List 2
  • List 3
  • List Bullet
  • List Bullet 2
  • List Bullet 3
  • List Continue
  • List Continue 2
  • List Continue 3
  • List Number
  • List Number 2
  • List Number 3
  • List Paragraph
  • Macro Text
  • No Spacing
  • Quote
  • Subtitle
  • TOCHeading
  • Title
Стили символов
  • Emphasis
  • Strong
  • Book Title
  • Default Paragraph Font
  • Intense Emphasis
  • Subtle Emphasis
  • Intense Reference
  • Subtle Reference
paragraph.style = 'Quote'
run.style = 'Book Title'

Атрибуты объекта Run


Отдельные фрагменты текста, представленные объектами Run, могут подвергаться дополнительному форматированию с помощью атрибутов. Для каждого из этих атрибутов может быть задано одно из трех значений: True (атрибут активизирован), False (атрибут отключен) и None (применяется стиль, установленный для данного объекта Run).

  • bold — Полужирное начертание
  • underline — Подчеркнутый текст
  • italic — Курсивное начертание
  • strike — Зачеркнутый текст


Изменим стили для всех параграфов нашего документа:

import docx

doc = docx.Document('example.docx')

# изменяем стили для всех параграфов
for paragraph in doc.paragraphs:
    paragraph.style = 'Normal'

doc.save('restyled.docx')


А теперь восстановим все как было:

import docx

os.chdir('C:\\example')

doc1 = docx.Document('example.docx')
doc2 = docx.Document('restyled.docx')

# получаем из первого документа стили всех абзацев
styles = []
for paragraph in doc1.paragraphs:
    styles.append(paragraph.style)

# применяем стили ко всем абзацам второго документа
for i in range(len(doc2.paragraphs)):
    doc2.paragraphs[i].style = styles[i]

doc2.save('restored.docx')


Изменим форматирвание объектов Run второго абзаца:

import docx

doc = docx.Document('example.docx')

# добавляем стиль символов для runs[0]
doc.paragraphs[1].runs[0].style = 'Intense Emphasis'
# добавляем подчеркивание для runs[4]
doc.paragraphs[1].runs[4].underline = True

doc.save('restyled2.docx')

Запись докуменов MS Word


Добавление абзацев осуществляется вызовом метода add_paragraph() объекта Document. Для добавления текста в конец существующего абзаца, надо вызвать метод add_run() объекта Paragraph:

import docx

doc = docx.Document()

# добавляем первый параграф
doc.add_paragraph('Здравствуй, мир!')

# добавляем еще два параграфа
par1 = doc.add_paragraph('Это второй абзац.')
par2 = doc.add_paragraph('Это третий абзац.')

# добавляем текст во второй параграф
par1.add_run(' Этот текст был добавлен во второй абзац.')

# добавляем текст в третий параграф
par2.add_run(' Добавляем текст в третий абзац.').bold = True

doc.save('helloworld.docx')


Оба метода, add_paragraph() и add_run() принимают необязательный второй аргумент, содержащий строку стиля, например:

doc.add_paragraph('Здравствуй, мир!', 'Title')

Добавление заголовков


Вызов метода add_heading() приводит к добавлению абзаца, отформатированного в соответствии с одним из возможных стилей заголовков:

doc.add_heading('Заголовок 0', 0)
doc.add_heading('Заголовок 1', 1)
doc.add_heading('Заголовок 2', 2)
doc.add_heading('Заголовок 3', 3)
doc.add_heading('Заголовок 4', 4)


Аргументами метода add_heading() являются строка текста и целое число от 0 до 4. Значению 0 соответствует стиль заголовка Title.

Добавление разрывов строк и страниц


Чтобы добавить разрыв строки (а не добавлять новый абзац), нужно вызвать метод add_break() объекта Run. Если же требуется добавить разрыв страницы, то методу add_break() надо передать значение docx.enum.text.WD_BREAK.PAGE в качестве единственного аргумента:

import docx

doc = docx.Document()

doc.add_paragraph('Это первая страница')
doc.paragraphs[0].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE)
doc.add_paragraph('Это вторая страница')

doc.save('pages.docx')

Добавление изображений


Метод add_picture() объекта Document позволяет добавлять изображения в конце документа. Например, добавим в конец документа изображение kitten.jpg шириной 10 сантиметров:

import docx

doc = docx.Document()

doc.add_paragraph('Это первый абзац')
doc.add_picture('kitten.jpg', width = docx.shared.Cm(10))

doc.save('picture.docx')


Именованные аргументы width и height задают ширину и высоту изображения. Если их опустить, то значения этих аргументов будут определяться размерами самого изображения.

Добавление таблицы

import docx

doc = docx.Document()

# добавляем таблицу 3x3
table = doc.add_table(rows = 3, cols = 3)
# применяем стиль для таблицы
table.style = 'Table Grid'

# заполняем таблицу данными
for row in range(3):
    for col in range(3):
        # получаем ячейку таблицы
        cell = table.cell(row, col)
        # записываем в ячейку данные
        cell.text = str(row + 1) + str(col + 1)

doc.save('table.docx')

import docx

doc = docx.Document('table.docx')

# получаем первую таблицу в документе
table = doc.tables[0]

# читаем данные из таблицы
for row in table.rows:
    string = ''
    for cell in row.cells:
        string = string + cell.text + ' '
    print(string)
11 12 13 
21 22 23 
31 32 33 
Дополнительно

Поиск:
MS • Python • Web-разработка • Word • Модуль

Заполняем документы в Microsoft Word при помощи Python. Часть 1 / Хабр

Исполняем обязанности по получению сведений о своих бенефициарных владельцах

Небольшая вводная

Начиная с 21 декабря 2016 года вступили изменения в ФЗ РФ «О противодействии легализации (отмыванию) доходов, полученных преступным путем, и финансированию терроризма», касательно обязанности юридического лица по раскрытию информации о своих бенефициарных владельцах. В связи с этим, многие компании направляют запросы по цепочке владения с целью выяснения своих бенефициарных владельцев. Кто-то формирует запросы на бумаге, кто-то рассылает электронные письма.

На наш взгляд, надлежащим доказательством исполнения обязанности «знай своего бенефициарного владельца» является наличие письма на бумаге с отметкой об отправке/вручении. Данные письма в идеале должны готовиться не реже одного раза в год. Если в ведении юриста находится всего несколько компаний, то составление писем не составляет особого труда. Но, если компаний больше 3-х десятков, составление писем превращается в уничтожающую позитив рутину. Дело усугубляется тем, что реквизиты писем постоянно меняются: подписанты увольняются, компании перерегистрируются, меняя адреса. Все это надо учитывать. Как здесь могут помочь навыки программирования на python?


Очень просто — хорошо бы иметь программу, которая сама будет подставлять в письма необходимые реквизиты. В том числе формировать сами письма, не заставляя создавать документ за документом вручную. Попробуем.

Структура письма в word. Модуль python docxtpl

Перед написанием кода программы посмотрим как должен выглядеть шаблон письма, в который мы будем помещать наши данные.

Текст письма от общества своему участнику/акционеру будет примерно следующим:

Напишем простую программу, которая заполнит для начала одно поле в нашем шаблоне, чтобы понять принцип работы.

Для начала в самом шаблоне письма Word вместо одного из полей, например, подписанта поставим переменную. Данная переменная должна быть на либо на англ. языке, либо на русском, но в одно слово.Также переменная должна быть обязательно заключена в двойные фигурные скобки. Выглядеть это будет примерно так:

Сама программа будет иметь следующий вид:

from docxtpl import DocxTemplate
doc = DocxTemplate("шаблон.docx")
context = { 'director' : "И.И.Иванов"}
doc.render(context)
doc.save("шаблон-final.docx")

Вначале мы импортируем модуль для работы с документами формата Word. Далее мы открываем шаблон, и в поле директор, которое бы обозначили ранее в самом шаблоне, вносим ФИО директора. В конце документ сохраняется под новым именем.

Таким образом, чтобы заполнить все поля в файле-шаблоне Word нам для начала необходимо определить все поля ввода в самом шаблоне скобками {} вместе с переменными и потом написать программу. Код будет примерно следующим:

from docxtpl import DocxTemplate
doc = DocxTemplate("шаблон.docx")
context = { 'emitent' : 'ООО Ромашка', 'address1' : 'г. Москва, ул. Долгоруковская, д. 0', 'участник': 'ООО Участник', 'адрес_участника': 'г. Москва, ул. Полевая, д. 0', 'director': 'И.И. Иванов'}
doc.render(context)
doc.save("шаблон-final.docx")

На выходе при исполнении программы мы получим готовый заполненный документ.

Скачать готовый шаблон Word можно здесь.

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

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

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

Выполните приведенную ниже pip команду в терминале, чтобы загрузить модуль python-docx:

$ pip install 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)

Вывод:

Теперь поочередно выведем все абзацы, присутствующие в файле 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, создайте объект класса 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.

Данная публикация является переводом статьи «Reading and Writing MS Word Files in Python via Python-Docx Module» , подготовленная редакцией проекта.

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

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

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

Выполните приведенную ниже pip команду в терминале, чтобы загрузить модуль python-docx:

$ pip install 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)

Вывод:

Теперь поочередно выведем все абзацы, присутствующие в файле 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, создайте объект класса 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.

Данная публикация является переводом статьи «Reading and Writing MS Word Files in Python via Python-Docx Module» , подготовленная редакцией проекта.

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

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

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

Выполните приведенную ниже pip команду в терминале, чтобы загрузить модуль python-docx:

$ pip install 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)

Вывод:

Теперь поочередно выведем все абзацы, присутствующие в файле 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, создайте объект класса 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.

Данная публикация является переводом статьи «Reading and Writing MS Word Files in Python via Python-Docx Module» , подготовленная редакцией проекта.

Чтение / запись MS Word файлов в Python

Можно ли читать и писать файлы Word (2003 и 2007) в Python без использования объекта COM?

Я знаю, что могу:

f = open('c:\file.doc', "w")
f.write(text)
f.close()

но Word будет читать его как файл HTML, а не как родной файл .doc.

python

ms-word

read-write

Поделиться

Источник


UnkwnTech    

09 октября 2008 в 18:06

4 ответа


  • Python MS Word

    Возможный Дубликат : Чтение / запись MS Word файлов в Python Я изучаю систему управления требованиями (например, requiste pro-Rational Rose) — и мне нужно будет прочитать документ MS Word в поисках конкретных тегов-либо в среде windows, либо в среде Apple OS. Существуют ли какие — либо известные…

  • MS Word поддержка на iOS

    Возможный Дубликат : Чтение файла .doc (MSWord) в ObjectiveC? Я пишу приложение для печати, которое поддерживает выбор изображения и отправку через Интернет для ePrinting. Мой клиент спрашивает, Можно ли открыть MS Word и выбрать / извлечь некоторое изображение для вышеуказанного метода печати…



38

См . python-docx , его официальная документация доступна здесь .

Это очень хорошо сработало для меня.

Поделиться


Damian    

21 октября 2011 в 10:45



11

Если вам нужно только то, что читать, проще всего использовать команду linux soffice, чтобы преобразовать ее в текст, а затем загрузить текст в python:

Поделиться


markling    

08 мая 2015 в 11:11



7

Я бы заглянул в IronPython , который внутренне имеет доступ к windows / office APIs, потому что он работает во время выполнения .NET.

Поделиться


auramo    

09 октября 2008 в 18:39


  • PHP чтение и запись в MS WORD

    Я хочу читать / писать документы word с помощью PHP, Я знаю, что в php есть функция для работы с объектами COM, которую мы можем использовать для чтения и записи документов word, но объекты COM доступны только на Windows, а не на Linux. Мой сервер работает под управлением linux, и клиенты…

  • Чтение пользовательских свойств документа в файле MS Word с помощью python

    Как я могу получить свойства документа MS-Word 2010 с помощью python? со свойствами документа я имею в виду тех, кто может быть добавлен или изменен в разделе FILE — > информация — > свойства-> Расширенные свойства (в MS-WORD 2010) Я использую python 2.7 на windows764bit и соответствующую версию…



3

doc (в данном случае Word 2003) и docx (Word 2007) — это разные форматы, где последний обычно представляет собой просто архив xml и графических файлов. Я бы предположил, что очень возможно писать в файлы docx, манипулируя содержимым этих файлов xml. Однако я не вижу, как вы могли бы читать и записывать в файл doc без какого-либо типа интерфейса компонента COM.

Поделиться


fuentesjr    

09 октября 2008 в 18:36


Похожие вопросы:

извлечение текста из файлов MS word в python

для работы с файлами MS word в python есть расширения python win32, которые можно использовать в windows. Как мне сделать то же самое в linux? Есть ли здесь библиотека?

Поиск MS файлов word в Каталоге для конкретного содержимого в Linux

У меня есть структура каталогов, полная файлов MS word, и я должен искать в каталоге определенную строку. До сих пор я использовал следующую команду для поиска файлов в каталоге находить. -старпома…

Существует ли библиотека python для редактирования файлов msword doc?

Возможный Дубликат : Чтение / запись MS Word файлов в Python Я знаю, что есть некоторые библиотеки для редактирования файлов excel, но есть ли что-нибудь для редактирования файлов msword…

Python MS Word

Возможный Дубликат : Чтение / запись MS Word файлов в Python Я изучаю систему управления требованиями (например, requiste pro-Rational Rose) — и мне нужно будет прочитать документ MS Word в поисках…

MS Word поддержка на iOS

Возможный Дубликат : Чтение файла .doc (MSWord) в ObjectiveC? Я пишу приложение для печати, которое поддерживает выбор изображения и отправку через Интернет для ePrinting. Мой клиент спрашивает,…

PHP чтение и запись в MS WORD

Я хочу читать / писать документы word с помощью PHP, Я знаю, что в php есть функция для работы с объектами COM, которую мы можем использовать для чтения и записи документов word, но объекты COM…

Чтение пользовательских свойств документа в файле MS Word с помощью python

Как я могу получить свойства документа MS-Word 2010 с помощью python? со свойствами документа я имею в виду тех, кто может быть добавлен или изменен в разделе FILE — > информация — > свойства->…

GAE: используйте гибкую среду или стандартную среду в проекте с обработкой файлов MS Word

Я новичок в GCP, но мне нужна помощь, что выбрать : Flex или стандартную среду . Приложение, которое я разработал (Python 2.7), имеет дело с: Загрузка MS Word файлов от пользователя (онлайн)….

Чтение из файла word в python

Как я могу читать из файла word (docx) в python. Я могу читать из txt-файла, но не могу сделать то же самое для документа MS Office word. Есть предложения?

Как открыть файл pdf в диапазоне от ms word до python

Я могу легко щелкнуть левой кнопкой мыши на файле word, а затем сказать открыть с помощью word. Ms word автоматически преобразует pdf достаточно в docx, без форматирования(мне не нужно…

OpenOffice + Python, pабота с файлами MS Word

Пару недель назад для проекта Grammarly Handbook понадобилось импортировать много форматированного текста из документов MS Word. Текст находился в 40 файлах размером от одной до двадцати страниц. Первые несколько страниц я перенес вручную и несколько утомился — механическая работа меня не очень радует. Начал искать возможность читать вордовские документы из Питона.

У меня был очень позитивный опыт с библиотеками xlrd, xlwt. Первая читает документы Excel, а вторая — записывает. Но подобных библиотек для документов *.doc я не нашел. Зато нашел возможность обращаться из Python к OpenOffice. Эту возможность я успешно использовал, успешно импортировал весь грамматический материал и даже наткнулся на интересную идею для нашего основного продукта — инструмента проверки грамматики Grammarly.

Установка OpenOffice и python-uno

Сначала я поставил OpenOffice под Mac OS X, но оказалось что python bindings там только для python версии 2.3. То же самое справедливо и для Windows. Благо у меня всегда под рукой VirtualBox, в котором установлена Ubuntu. Для чистоты эксперимента я прямо сейчас поставлю чистую Ubuntu 11.04, куда и поставлю все необходимые пакеты.

sudo aptitude install openoffice.org openoffice.org-writer python-uno

В Ubuntu 11.04 вместо OpenOffice используется независимый от Oracle форк LibreOffice. Запускаем LibreOffice и говорим ему слушать порт 2002:

libreoffice -accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"

Работа с документами

Ставим ipython и git-core. Клонируем вспомогательные функции python-uno-utils, которые я выложил в github gist. Запускаем ipython из папки с python-uno-utils.

sudo aptitude install ipython git-core
git clone git://gist.github.com/923032.git python-uno-utils
cd python-uno-utils
ipython

Сначала нужно импортировать модуль uno — в нем есть import hooks, которые выполнят всю необходимую магию, чтобы в нашей питоновской консоли работал python-uno.

Затем подключаем python-uno-utils

In [2]: %run python-uno-utils.py

Команда %run выгодно отличается от import тем, что после изменения файла достаточно выполнить команду повторно и продолжать работать с уже измененными функциями-классами без перезагрузки консоли.

Открываем документ hello.doc, который я создал специально для этой статьи. Видим как появляется новое окно LibreOffice с этим документом.

In [3]: doc = open_document('http://dl.dropbox.com/u/318944/python-uno/hello.doc')

Документ состоит из параграфов:

In [4]: print_elements(doc.Text)
Привет!

Это список:
Раз
Два
Три

Разные цвета: красный, зеленый, синий.

Bold, italic.

Каждый параграф может состоять из кусочков (spans) с разным форматированием.

In [5]: l = list_elements(doc.Text)
In [6]: print l[7].getString()
Разные цвета: красный, зеленый, синий.

In [7]: print_elements(l[7])
Разные цвета:
красный
,
зеленый
,
синий
.

In [8]: l = list_elements(l[7])

In [9]: color(l[0])
Out[9]: 'black'

In [10]: color(l[1])
Out[10]: 'red'

In [11]: color(l[2])
Out[11]: 'black'

In [12]: color(l[3])
Out[12]: 'green'

In [13]: color(l[4])
Out[13]: 'black'

In [14]: color(l[5])
Out[14]: 'blue'

In [15]: color(l[6])
Out[15]: 'black'

После успешной работы с документом, закрываем его:

Также смотрите в python-uno-tools: iter_elements, nonempty_elements, is_leaf, is_bold, is_italic, is_underline, is_list.

Дополнительная информация — http://lucasmanual.com/mywiki/OpenOffice.

Please enable JavaScript to view the comments powered by Disqus.
comments powered by

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

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

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

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

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

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

  $ pip установить python-docx
  

Чтение файлов MS Word с помощью модуля 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 , как показано в следующем скрипте:

  импорт docx

doc = docx.Документ ("E: /my_word_file.docx")
  

Объект класса Document doc теперь можно использовать для чтения содержимого my_word_file.docx.

Параграфы для чтения

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

  all_paras = пункты документа
len (все_парас)
  

Выход:

  10
  

Теперь мы итеративно распечатаем все абзацы в файле my_word_file.docx:

  для пункта all_paras:
    печать (параграф)
    Распечатать("-------")
  

Выход:

  -------
Вступление
-------

-------
Добро пожаловать в stackabuse.ком
-------
Лучший сайт для изучения Python и других языков программирования
-------
Научитесь программировать и писать код наиболее эффективным образом
-------

-------
Подробности
-------

-------
Этот веб-сайт содержит полезные статьи по программированию для Java, Python, Spring и т. Д.
-------
  

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

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

  single_para = док.абзацы [4]
печать (одиночный_пара.текст)
  

Выход:

  Лучший сайт для изучения Python и других языков программирования
  
Чтение заездов

Цикл в текстовом документе — это непрерывная последовательность слов со схожими свойствами, такими как одинаковые размеры шрифта, формы шрифтов и стили шрифтов. Например, если вы посмотрите на вторую строку файла my_word_file.docx, она содержит текст «Добро пожаловать на stackabuse.com», здесь текст «Добро пожаловать» написан обычным шрифтом, а текст «stackabuse.com »выделен полужирным шрифтом. Таким образом, текст« Welcome to »рассматривается как один запуск, а выделенный жирным шрифтом текст« stackabuse.com »- за другой запуск.

Аналогичным образом, «научиться программировать и писать код наиболее эффективным способом» рассматриваются как два разных выполнения в параграфе «Научиться программировать и писать код наиболее эффективным образом».

Ознакомьтесь с нашим практическим практическим руководством по изучению Git с лучшими практиками, общепринятыми стандартами и включенной шпаргалкой.Прекратите поиск в Google команд Git и фактически выучите его!

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

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

  single_para = пункты документа [4]
для запуска в single_para.runs:
    печать (run.text)
  

Выход:

  Лучший сайт для
изучение Python
 и другие
Языки программирования
  

Таким же образом следующий сценарий печатает все прогоны из 6-го абзаца my_word_file.docx файл:

  second_para = пункты документа [5]
для запуска в second_para.runs:
    печать (run.text)
  

Выход:

  Научитесь программировать и писать код на
самый эффективный способ
  

Написание файлов 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 («Это первый абзац файла MS Word.»)
mydoc.save ("E: / my_written_file.docx ")
  

После выполнения вышеуказанного сценария вы должны увидеть новый файл «my_written_file.docx» в каталоге, который вы указали в методе save () . Внутри файла вы должны увидеть один абзац, который гласит: «Это первый абзац файла MS Word».

Добавим еще один абзац в my_written_file.docx:

  mydoc.add_paragraph («Это второй абзац файла MS Word.»)
mydoc.save ("E: /my_written_file.docx")
  

Этот второй абзац будет добавлен в конец существующего содержимого в my_written_file.docx.

Написание прогонов

Вы также можете писать прогоны, используя модуль python-docx . Чтобы написать прогоны, вы сначала должны создать дескриптор абзаца, к которому вы хотите добавить свой прогон. Взгляните на следующий пример, чтобы увидеть, как это делается:

  third_para = mydoc.add_paragraph («Это третий абзац.»)
third_para.add_run ("это раздел в конце третьего абзаца")
mydoc.save ("E: /my_written_file.docx")
  

В приведенном выше сценарии мы пишем абзац, используя метод add_paragraph () объекта Document class 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 («Это заголовок уровня 1», 0)
mydoc.add_heading («Это заголовок 2 уровня», 1)
mydoc.add_heading («Это заголовок уровня 3», 2)
mydoc.save ("E: / my_written_file.docx ")
  
Добавление изображений

Для добавления изображений в файлы MS Word можно использовать метод add_picture () . Путь к изображению передается в качестве параметра методу add_picture () . Вы также можете указать ширину и высоту изображения с помощью атрибута docx.shared.Inches () . Следующий сценарий добавляет изображение из локальной файловой системы в файл Word 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")
  

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

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

Заключение

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

Работа с документами — документация по python-docx 0.8.11

python-docx позволяет создавать новые документы, а также вносить изменения в существующие
единицы. Фактически, это позволяет вам вносить изменения только в существующие документы; это просто
что если вы начнете с документа, в котором нет содержания, это может показаться
сначала как будто вы создаете его с нуля.

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

Давайте пройдемся по этапам создания документа по одному примеру,
начнем с двух основных действий, которые вы можете сделать с документом: открыть его и
сохрани это.

Открытие документа

Самый простой способ начать — открыть новый документ без указания
файл для открытия:

 из документа импорта docx

document = Документ ()
document.save ('test.docx')
 

Это создает новый документ из встроенного шаблона по умолчанию и сохраняет его.
без изменений в файл с именем «test.docx». Так называемый «шаблон по умолчанию»
на самом деле просто файл Word без содержимого, хранящийся с установленным python-docx
упаковка.Это примерно то же самое, что и при выборе документа Word
шаблона после выбора пункта меню Word File> New from Template… .

ДЕЙСТВИТЕЛЬНО открытие документа

Если вам нужен больший контроль над окончательным документом, или если вы хотите изменить
существующий документ, вам нужно открыть его с именем файла:

 документ = документ ('существующий-документ-файл.docx')
document.save ('новое-имя-файла.docx')
 

На заметку:

  • Вы можете открыть любой файл Word 2007 или более поздней версии таким образом (.doc файлы из Word 2003
    и раньше работать не будет). Хотя вы, возможно, не сможете манипулировать всеми
    содержимое еще не было, все, что там уже есть, загрузится и сохранится. В
    набор функций все еще находится в стадии разработки, поэтому вы не можете добавлять или изменять такие вещи, как
    заголовков или сносок пока нет, но если они есть в документе python-docx вежливо
    достаточно, чтобы оставить их в покое, и достаточно умен, чтобы спасти их, фактически не
    понимая, что они собой представляют.
  • Если вы используете то же имя файла для открытия и сохранения файла, python-docx будет послушно
    перезаписать исходный файл без пика.Вы хотите убедиться, что
    что вы намереваетесь.

Открытие «файлового» документа

python-docx может открывать документ из так называемого файлового объекта . Он также может
сохранить в файловый объект. Это может быть удобно, если вы хотите получить исходный код
или настроить таргетинг на документ через сетевое соединение или из базы данных и не хотите
для (или не разрешено) взаимодействовать с файловой системой. На практике это означает
вы можете передать открытый файл или объект потока StringIO / BytesIO для открытия или сохранения
документ вроде так:

 f = open ('foobar.docx ',' rb ')
document = Документ (f)
f.close ()

# или

с open ('foobar.docx', 'rb') как f:
    source_stream = StringIO (f.read ())
document = Документ (исходный_поток)
source_stream.close ()
...
target_stream = StringIO ()
document.save (target_stream)
 

Параметр режима открытия файла 'rb' не требуется для всех рабочих
системы. По умолчанию это 'r' , что иногда бывает достаточно, но ‘b’
(выбор двоичного режима) требуется в Windows и, по крайней мере, в некоторых версиях
Linux, чтобы Zipfile мог открыть файл.

Итак, у вас открыт документ, и вы почти уверены, что сможете его сохранить
где-нибудь позже. Следующий шаг — добавить туда некоторый контент…

Как извлечь данные из документов MS Word с помощью Python | Натали Оливо

В этом блоге подробно рассказывается о локальном извлечении информации из документов Word. Поскольку многие компании и роли неотделимы от Microsoft Office Suite, это полезный блог для всех, кто сталкивается с данными, передаваемыми через .doc или.docx форматы.

В качестве предварительного условия на вашем компьютере должен быть установлен Python. Те из вас, кто делает это на работе, скорее всего, не имеют прав администратора. В этом блоге объясняется, как установить Anaconda на компьютер с Windows без прав администратора.

Вы можете найти ноутбук, поддерживающий этот блог, здесь.

Изображение, созданное с помощью Microsoft Word и поиска в Google «Логотип Microsoft Word» и «Логотип Python»

Мы будем использовать XML-формат каждого текстового документа. Оттуда мы будем использовать библиотеку регулярных выражений, чтобы найти каждый URL-адрес в тексте документа, а затем добавить URL-адреса в список, который идеально подходит для выполнения циклов for.

 #specific для извлечения информации из документов Word 
import os
import zipfile # другие инструменты, полезные для извлечения информации из нашего документа
import re #to pretty print our xml:
import xml.dom.minidom
  • os позволит вам перемещаться и находить соответствующие файлы в вашей операционной системе.
  • zip-файл

  • позволит вам извлечь xml из файла
  • xml.dom.minidom для синтаксического анализа xml-кода

Сначала нам нужно направить наш код на открытие файлов в том месте, где они хранятся. Чтобы увидеть это из наших записных книжек (вместо того, чтобы открывать файловый проводник), мы можем использовать os . Знание пути к отдельному интересующему файлу избавляет от необходимости использовать os в этом простом примере, но позже эту библиотеку можно использовать для создания списка документов, хранящихся в целевой папке. Наличие списка документов, хранящихся в папке, полезно, если вы хотите написать цикл for для извлечения информации из всех текстовых документов, хранящихся в папке.

Чтобы просмотреть список файлов в текущем каталоге, используйте одну точку в os filepath:

 os.listdir ('.') 

Чтобы просмотреть список файлов в каталоге над текущим местоположением, используйте двойную точку:

 os.listdir ('..') 

После того, как вы определите, где хранятся ваши документы Word, вы сможете преобразовать найденный файл с путем к файлу в файл zipfile.ZipFile type, который для наших целей можно прочитать.

Формат файла ZIP — это стандартный архив и стандарт сжатия

https: // docs.python.org/3/library/zipfile.html

 document = zipfile.ZipFile ('../ docs / TESU CBE 29 Оценка должностных обязанностей сотрудника - Окончательное утверждение.docx') # документ будет иметь тип файла zipfile.ZipFile 

Теперь объект .read () для класса zipfile требует аргумента имени, который отличается от имени файла или пути к файлу.

 ZipFile.read (name, pwd = None) 

Чтобы увидеть примеры доступных имен, мы можем использовать объект .name () объект

.namelist () 

В блокноте Jupyter к этому блогу я исследую некоторые из этих имен, чтобы показать, что они собой представляют. Имя с основным текстом документа Word — «word / document.xml»

Я нашел красивую технику печати в ответе пользователя StackOverflow Нейта Болтона на вопрос: «Красивая печать XML на Python».

Мы будем использовать только красивую печать, чтобы помочь нам идентифицировать шаблоны в XML для извлечения наших данных. Я лично не очень хорошо знаю XML, поэтому я буду полагаться на шаблоны синтаксиса, чтобы найти каждый URL-адрес в тексте нашего текстового документа.Если вы уже знаете свой синтаксический шаблон для извлечения данных, возможно, вам вообще не нужно распечатывать его.

В нашем примере мы обнаруживаем, что символы > http и < окружают каждую гиперссылку, содержащуюся в тексте документа.

Мне нужно будет выполнить нашу задачу по сбору всего текста между вышеупомянутыми символами. Чтобы помочь в том, как это сделать с помощью регулярного выражения, я использовал следующий вопрос StackOverflow, который содержит то, что я ищу в первоначальном запросе: регулярное выражение, чтобы найти строку, заключенную между двумя символами, ИСКЛЮЧАЯ разделители.

Хотя я хочу сохранить http , я не хочу оставлять < или > . Я внесу эти изменения в свои элементы списка, используя нарезку строк и понимание списка.

 link_list = re.findall ('http. *? \ <', Xml_str) [1:] 
link_list = [x [: - 1] for x in link_list]

Чтобы увидеть полный блокнот Jupyter, стоящий за этим блогом, кликните сюда!

Если вы заинтересованы в создании и написании документов MS Word с использованием python, ознакомьтесь с библиотекой python-docx.

Существуют и другие методы извлечения текста и информации из текстовых документов, например библиотеки docx2txt и docx, представленные в ответах на следующий пост на форуме Python.

Автоматизируйте Microsoft Excel и Word с помощью Python | by M Khorasani

Интегрируйте Excel с Word для беспрепятственного создания автоматических отчетов

Фото Исаака Смита на Unsplash

Microsoft Excel и Word, без сомнения, являются двумя наиболее широко используемыми программами в корпоративном и некорпоративном мире.Они практически синонимичны самому термину «работа». Часто не проходит и недели, чтобы мы не использовали комбинацию этих двух вещей и тем или иным способом использовали их доброту. Хотя для среднесуточных целей автоматизация не требуется, бывают случаи, когда автоматизация может оказаться необходимостью. А именно, когда у вас есть множество диаграмм, рисунков, таблиц и отчетов для создания, это может стать чрезвычайно утомительным занятием, если вы выберете ручной маршрут. Ну, этого не должно быть.На самом деле существует способ создать конвейер в Python, в котором вы можете легко интегрировать их для создания электронных таблиц в Excel, а затем передать результаты в Word для создания отчета практически мгновенно.

Openpyxl

Познакомьтесь с Openpyxl, возможно, одним из самых универсальных привязок в Python, который делает взаимодействие с Excel буквально прогулкой по парку. Вооружившись им, вы можете читать и записывать все текущие и устаревшие форматы Excel, то есть xlsx и xls. Openpyxl позволяет заполнять строки и столбцы, выполнять формулы, создавать 2D и 3D диаграммы, маркировать оси и заголовки, а также множество других возможностей, которые могут пригодиться.Однако, что наиболее важно, этот пакет позволяет вам перебирать бесконечное количество строк и столбцов в Excel, тем самым избавляя вас от всех этих надоедливых вычислений и построения графиков, которые вам приходилось делать раньше.

Python-docx

Затем идет Python-docx, этот пакет для Word - то же самое, что Openpyxl для Excel. Если вы еще не изучали их документацию, вам, вероятно, стоит взглянуть. Python-docx - без преувеличения один из самых простых и понятных мне наборов инструментов, с которыми я работал с тех пор, как начал работать с самим Python.Он позволяет автоматизировать создание документов путем автоматической вставки текста, заполнения таблиц и визуализации изображений в отчет без каких-либо накладных расходов.

Давайте без лишних слов создадим наш собственный автоматизированный конвейер. Запустите Anaconda (или любую другую IDE по вашему выбору) и установите следующие пакеты:

 pip install openpyxlpip install python-docx 

Microsoft Excel Automation

Сначала мы загрузим уже созданную книгу Excel (показано ниже):

 workbook = xl.load_workbook ('Book1.xlsx') 
sheet_1 = workbook ['Sheet1']

Изображение автора.

Затем мы переберем все строки в нашей электронной таблице, чтобы вычислить и вставить значения мощности путем умножения тока на напряжение:

 для строки в диапазоне (2, sheet_1.max_row + 1): 
current = sheet_1. cell (row, 2)
Voltage = sheet_1.cell (row, 3)
power = float (current.value) * float (Voltage.value)
power_cell = sheet_1.cell (row, 1)
power_cell.value = мощность

Как только это будет сделано, мы будем использовать рассчитанные значения мощности для создания линейной диаграммы, которая будет вставлена ​​в указанную ячейку, как показано ниже:

 значений = Ссылка (sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1) 
chart = LineChart ()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data (values)
sheet_1.add_chart (диаграмма, 'e2')
workbook.save ('Book1.xlsx')

Автоматически созданная электронная таблица Excel. Изображение автора.

Извлечение диаграммы

Теперь, когда мы сгенерировали нашу диаграмму, нам нужно извлечь ее как изображение, чтобы мы могли использовать ее в нашем отчете Word. Сначала мы объявим точное местоположение нашего файла Excel, а также место для сохранения изображения выходной диаграммы:

 input_file = "C: / Users /.../Book1.xlsx "
output_image =" C: / Users /.../ chart.png "

Затем откройте электронную таблицу, используя следующий метод:

 operation = win32com.client.Dispatch (" Excel.Application " ) 
operation.Visible = 0
operation.DisplayAlerts = 0
workbook_2 = operation.Workbooks.Open (input_file)
sheet_2 = operation.Sheets (1)

Впоследствии вы можете перебирать все объекты диаграммы в электронной таблице ( если их несколько) и сохраните их в указанном месте как таковые:

 для x, диаграмма в enumerate (sheet_2.Фигуры): 
chart.Copy ()
image = ImageGrab.grabclipboard ()
image.save (output_image, 'png')
passworkbook_2.Close (True)
operation.Quit ()

Microsoft Word Automation

Теперь, что у нас есть сгенерированное изображение диаграммы, мы должны создать шаблон документа, который в основном представляет собой обычный документ Microsoft Word (.docx), сформулированный точно так, как мы хотим, чтобы наш отчет выглядел, включая гарнитуры, размеры шрифтов, форматирование и структуру страницы. Затем все, что нам нужно сделать, это создать заполнители для нашего автоматизированного контента i.е. значения таблицы и изображения и объявить их с именами переменных, как показано ниже.

Шаблон документа Microsoft Word. Изображение автора.

Любой автоматизированный контент может быть объявлен в двойных фигурных скобках {{ имя_переменной }}, включая текст и изображения. Для таблиц вам необходимо создать таблицу со строкой шаблона со всеми включенными столбцами, а затем вам нужно добавить одну строку вверху и одну строку ниже со следующим обозначением:

Первая строка:

 {% tr для элемент в  имя_переменной %} 

Последняя строка:

 {% tr endfor%} 

На рисунке выше имена переменных

  • table_contents для словаря Python, в котором будут храниться наши табличные данные
  • Индекс для ключей словаря (первый столбец)
  • Мощность, ток и напряжение для значений словаря (второй, третий и четвертый столбцы)

Затем мы импортируем наш шаблонный документ в Python и создаем словарь, который будет хранить значения нашей таблицы:

 template = DocxTemplate ('template.docx ') 
table_contents = [] для i в диапазоне (2, sheet_1.max_row + 1):
table_contents.append ({
' Index ': i-1,
' Power ': sheet_1.cell (i, 1) .value,
'Current': sheet_1.cell (i, 2) .value,
'Voltage': sheet_1.cell (i, 3) .value
})

Затем мы 'импортируем изображение диаграммы, которое было ранее созданный Excel, и создаст другой словарь для создания экземпляров всех переменных-заполнителей, объявленных в документе шаблона:

 image = InlineImage (template, 'chart.png ', Cm (10)) context = {
' title ':' Automated Report ',
' day ': datetime.datetime.now (). strftime ('% d '),
' month ': datetime.datetime .now (). strftime ('% b'),
'год': datetime.datetime.now (). strftime ('% Y'),
'table_contents': table_contents,
'image': image
}

И, наконец, мы визуализируем отчет с нашей таблицей значений и изображением диаграммы:

 template.render (context) 
template.save ('Automated_report.docx')

Results

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

Автоматически сгенерированный отчет. Изображение автора.

Исходный код

Если вы хотите узнать больше о Python и визуализации данных, не стесняйтесь проверить следующие (связанные с партнерами) курсы: Python для всех, специализация и Визуализация данных с Python . Исходный код и шаблон для этого руководства можно найти в следующем репозитории GitHub.

Кроме того, не стесняйтесь изучать больше моих руководств здесь .

Заполнение шаблонов MS Word с помощью Python

Введение

В предыдущем посте я рассмотрел один подход к созданию документов с использованием
HTML-шаблоны для создания PDF-файлов. Хотя PDF великолепен, мир по-прежнему полагается на
в Microsoft Word для создания документов. На самом деле это будет намного проще для
бизнес-пользователь для создания желаемого шаблона, который поддерживает все настраиваемое форматирование
им нужно в Word, а не пытаться использовать HTML + CSS.Благо есть пакет
который поддерживает создание почтового слияния MS Word исключительно в Python. Этот подход имеет
преимущество работы в любой системе - даже если Word не установлен.
Преимущество использования python для слияния (по сравнению с листом Excel) заключается в том, что вы не
ограничены в способах получения или обработки данных. Полная гибкость и мощность
экосистема Python у вас под рукой. Это должно быть
полезный инструмент, о котором следует помнить каждый раз, когда вам нужно автоматизировать создание документов.

Фон

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

У меня есть один комментарий об этом пакете: использование термина «mailmerge» вызывает
очень простой вариант использования - заполнение нескольких документов почтовыми адресами.
Я знаю, что стандартный подход Word - называть этот процесс
mailmerge, но этот mailmerge может быть полезной системой шаблонов, которую можно использовать
для гораздо более сложного решения, чем просто заполнение имен и адресов
в документе.

Установка

Для пакета требуется файл lxml, для которого установлены двоичные файлы для конкретной платформы. рекомендую
используя conda для установки lxml и зависимостей, затем используя pip для пакета mailmerge
сам. Я тестировал это на Linux и Windows и, похоже, отлично работает на обеих платформах.

 conda установить lxml
pip install docx-mailmerge
 

Вот и все. Прежде чем мы покажем, как заполнять поля Word, давайте пройдемся по
создание документа Word.

Поля слияния слов

Для корректной работы docx-mailmerge необходимо создать стандартный Word
документ и определите соответствующие поля слияния.Приведенные ниже примеры предназначены для
Word 2010. Другие версии Word должны быть аналогичными. На самом деле это заняло у меня некоторое время
чтобы разобраться в этом процессе, но если вы проделаете это пару раз, это довольно просто.

Запустите Word и создайте основную структуру документа. Затем поместите курсор в
место, куда должны быть вставлены объединенные данные, и выберите «Вставка» -> «Быстрые части» -> «Поле» ..:

В диалоговом окне «Поле» выберите параметр «MergeField» в списке «Имена полей».
В поле «Имя поля» введите желаемое имя для поля.В этом случае мы
используя название компании.

После того, как вы нажмете ОК, вы должны увидеть что-то вроде этого: << Название компании >> в Word.
документ. Вы можете продолжить и создать документ со всеми необходимыми полями.

Простое слияние

После создания документа Word объединение значений становится простой операцией.
Приведенный ниже код содержит стандартный импорт и определяет имя
Word файл. В большинстве случаев вам нужно будет указать полный путь к шаблону.
но для простоты я предполагаю, что он находится в том же каталоге, что и ваши скрипты python:

 из __future__ import print_function
из mailmerge импортировать MailMerge
от даты импорта даты и времени

template = "Практический бизнес-Python.docx "
 

Чтобы создать документ mailmerge и просмотреть все поля:

 документ = MailMerge (шаблон)
печать (document.get_merge_fields ())
 
 {'покупки', 'Бизнес', 'адрес', 'скидка', 'получатель', 'дата', 'почтовый индекс', 'статус', 'номер_телефона', 'город', 'предел_доставки', 'штат'}
 

Для объединения значений и сохранения результатов используйте
document.merge

со всеми
переменным присвоено значение и
document.write

для сохранения вывода:

 документ.объединить (
    status = 'Золото',
    city ​​= 'Спрингфилд',
    phone_number = '800-555-5555',
    Business = "Классная обувь",
    zip = '55555',
    покупки = "500 000 долларов",
    shipping_limit = '500 долларов',
    состояние = 'МО',
    address = 'Мейн-стрит, 1234',
    date = '{:% d-% b-% Y}'. format (date.today ()),
    скидка = '5%',
    получатель = 'Мистер. Джонса)

document.write ('test-output.docx')
 

Вот пример того, как будет выглядеть окончательный документ:

Это простой документ, но почти все, что вы можете сделать в Word.
можно превратить в шаблон и заполнить таким образом.

Комплексное слияние

Если вы хотите воспроизвести результаты на нескольких страницах, есть ярлык
позвонил по номеру
merge_pages

который возьмет список словарей пар ключ, значение
и создать несколько страниц в одном файле.

В реальном сценарии вы извлекаете данные из основного источника (например, из базы данных, Excel, CSV и т. Д.)
и преобразовать данные в требуемый формат словаря. Для простоты
вот три клиентских словаря, содержащих наши выходные данные:

 cust_1 = {
    'status': 'Золото',
    'city': 'Спрингфилд',
    'phone_number': '800-555-5555',
    "Бизнес": "Классная обувь",
    'zip': '55555',
    'покупки': '500 000 долларов',
    'shipping_limit': '500 долларов',
    'состояние': 'МО',
    'адрес': 'Мейн-стрит, 1234',
    'дата': '{:% d-% b-% Y}'.формат (date.today ()),
    'скидка': '5%',
    'recipient': 'Мистер Джонса
}

cust_2 = {
    'status': 'Серебряный',
    'city': 'Колумб',
    'phone_number': '800-555-5551',
    "Бизнес": "Модные штаны",
    'zip': '55551',
    'покупки': '250 000 долларов',
    'shipping_limit': '2000 долларов',
    'состояние': 'ОН',
    'адрес': 'Эльм, 1234',
    'date': '{:% d-% b-% Y}'. format (date.today ()),
    'скидка': '2%',
    'recipient': 'Миссис Смит
}

cust_3 = {
    'status': 'Бронза',
    'город': 'Франклин',
    'phone_number': '800-555-5511',
    "Бизнес": "Tango Tops",
    'zip': '55511',
    'покупки': '100 000 долларов',
    'shipping_limit': '2500 долларов',
    'состояние': 'KY',
    'адрес': '1234 Adams St',
    'дата': '{:% d-% b-% Y}'.формат (date.today ()),
    'скидка': '2%',
    'recipient': 'Мистер Линкольн
}
 

Создание трехстраничного документа выполняется путем передачи списка словарей в

merge_pages

функция:

 document.merge_pages ([cust_1, cust_2, cust_3])
document.write ('test-output-mult-custs.docx')
 

Выходной файл отформатирован и готов к печати или дальнейшему редактированию.

Заполнение таблиц

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

значительно упрощает заполнение таблицы.

Чтобы построить шаблон, создайте стандартную таблицу Word с 1 строкой и вставьте
поля в соответствующих столбцах. Специального форматирования не требуется.
Должно получиться примерно так:

Далее нам нужно определить список словарей для каждого элемента в таблице.

 sales_history = [{
    'prod_desc': 'Красные туфли',
    'price': '10,00 долларов',
    'количество': '2500',
    'total_purchases': '25 000,00 долларов США'
}, {
    'prod_desc': 'Зеленая рубашка',
    'price': '20,00 долларов',
    'количество': '10000',
    'total_purchases': '200 000,00 долларов США'
}, {
    'prod_desc': 'Пурпурный пояс',
    'price': '5 долларов США',
    'количество': '5000',
    'total_purchases': '25 000,00 долларов США'
}]
 

Ключи в каждом словаре соответствуют полям слияния в документе.
Чтобы построить строки в таблице:

 документ.объединить (** cust_2)
document.merge_rows ('prod_desc', sales_history)
document.write ('тест-выход-таблица.docx')
 

В этом примере мы передаем словарь в
объединить

мимо
два
**

. Python знает, как преобразовать это в
ключ = значение

формат, необходимый функции. Последний шаг - позвонить по номеру
merge_rows

к
построить ряды таблицы.

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

Пример полного кода

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

 из __future__ import print_function
из mailmerge импортировать MailMerge
от даты импорта даты и времени

# Определить шаблоны - предполагается, что они находятся в том же каталоге, что и код
template_1 = "Практический бизнес-Python.docx"
template_2 = "Практический бизнес-Python-History.docx"

# Показать простой пример
document_1 = MailMerge (шаблон_1)
print ("Поля включены в {}: {}". format (template_1,
                                         документ_1.get_merge_fields ()))

# Слияние значений
document_1.merge (
    status = 'Золото',
    city ​​= 'Спрингфилд',
    phone_number = '800-555-5555',
    Business = "Классная обувь",
    zip = '55555',
    покупки = "500 000 долларов",
    shipping_limit = '500 долларов',
    состояние = 'МО',
    address = 'Мейн-стрит, 1234',
    date = '{:% d-% b-% Y}'. format (date.today ()),
    скидка = '5%',
    получатель = 'Мистер. Джонса)

# Сохраняем документ как пример 1
document_1.write ('example1.docx')

# Попробуйте пример номер два, где мы создаем несколько страниц
# Определить словарь для 3 клиентов
cust_1 = {
    'status': 'Золото',
    'city': 'Спрингфилд',
    'phone_number': '800-555-5555',
    "Бизнес": "Классная обувь",
    'zip': '55555',
    'покупки': '500 000 долларов',
    'shipping_limit': '500 долларов',
    'состояние': 'МО',
    'адрес': 'Мейн-стрит, 1234',
    'дата': '{:% d-% b-% Y}'.формат (date.today ()),
    'скидка': '5%',
    'recipient': 'Мистер Джонса
}

cust_2 = {
    'status': 'Серебряный',
    'city': 'Колумб',
    'phone_number': '800-555-5551',
    "Бизнес": "Модные штаны",
    'zip': '55551',
    'покупки': '250 000 долларов',
    'shipping_limit': '2000 долларов',
    'состояние': 'ОН',
    'адрес': 'Эльм, 1234',
    'date': '{:% d-% b-% Y}'. format (date.today ()),
    'скидка': '2%',
    'recipient': 'Миссис Смит
}

cust_3 = {
    'status': 'Бронза',
    'город': 'Франклин',
    'phone_number': '800-555-5511',
    "Бизнес": "Tango Tops",
    'zip': '55511',
    'покупки': '100 000 долларов',
    'shipping_limit': '2500 долларов',
    'состояние': 'KY',
    'адрес': '1234 Adams St',
    'дата': '{:% d-% b-% Y}'.формат (date.today ()),
    'скидка': '2%',
    'recipient': 'Мистер Линкольн
}

document_2 = MailMerge (шаблон_1)
document_2.merge_pages ([cust_1, cust_2, cust_3])
document_2.write ('example2.docx')

# Последний пример включает таблицу с историей продаж

sales_history = [{
    'prod_desc': 'Красные туфли',
    'price': '10,00 долларов',
    'количество': '2500',
    'total_purchases': '25 000,00 долларов США'
}, {
    'prod_desc': 'Зеленая рубашка',
    'price': '20,00 долларов',
    'количество': '10000',
    'total_purchases': '200 000 долларов.00 '
}, {
    'prod_desc': 'Пурпурный пояс',
    'price': '5 долларов США',
    'количество': '5000',
    'total_purchases': '25 000,00 долларов США'
}]

document_3 = MailMerge (шаблон_2)
document_3.merge (** cust_2)
document_3.merge_rows ('prod_desc', sales_history)
document_3.write ('example3.docx')
 

Заключение

Я всегда рад найти решения на основе Python, которые помогут мне уйти от
с помощью автоматизации MS Office. Я обычно более разбираюсь в питоне и чувствую, что
решения более портативны.Библиотека docx-mailmerge - одна из тех простых
но мощные инструменты, которые, я уверен, я буду использовать во многих случаях в будущем.

(Учебное пособие) Чтение и редактирование документов PDF и Word из Python

Документы PDF

PDF - это формат переносимого документа, содержащий тексты, изображения, диаграммы и т. Д., Который отличается от простых текстовых файлов. Это файл с расширением .pdf. расширение и было изобретено Adobe. Этот тип файла не зависит от каких-либо платформ, таких как программное обеспечение, оборудование и операционные системы.

Шаги для установки пакета:

  1. Вам необходимо установить пакет с именем «pypdf2», который может обрабатывать файл с расширением «.pdf».

  2. Вы можете увидеть, что пакет pypdf2 установлен и показан ниже.

Чтение документов PDF и извлечение данных

Вы будете извлекать только текст из файла PDF, поскольку PyPDF2 имеет ограничение, когда дело доходит до извлечения мультимедийного контента. Логотипы, изображения и т. Д.не может быть извлечен из него - для работы с этим руководством необходимо загрузить следующий PDF-файл.
Скачать файл в формате Pdf

Оператор import в приведенном выше коде получает модуль PyPDF2. Вам нужно использовать open ('pdfFileName', 'openMode') ', где' pdfFilename '- это' test.pdf ', а' openMode '- это' rb ', что означает чтение только в двоичном формате.

PyPDF2 имеет метод «PdfFileReader», который принимает вновь созданный объект «pdfFileObject».Теперь вы можете получить доступ к атрибуту numPages из pdfFileObject, который дает общее количество страниц.

Вышеупомянутый вывод равен 1. С; Вы можете видеть, что PDF-файл состоит только из одной страницы.

Вы можете использовать метод getPage (0) внутри объекта pdfReaderObject для получения первой страницы. Затем результат сохраняется в firstPageObject, где весь текст внутри этой конкретной страницы может быть распечатан с помощью функции extractText (). метод.

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

Объединение нескольких файлов PDF в один PDF

Вы будете объединять два разных файла PDF в один файл PDF. Старый файл PDF - это предыдущий файл, с которым вы работали, тогда как новый файл PDF можно загрузить по следующей ссылке:
Новый файл PDF.

Вы будете импортировать модуль PdfFileMerger из пакета PyPDF2, который помогает объединить файлы PDF.Указывается «путь», который указывает путь к папке, в которой находится файл. Кроме того, PDF-файлы для объединения включаются в список «pdf_files».

Вы можете видеть, что объект слияния создается с помощью «PdfFileMerger». Цикл выполняется для каждого файла в списке, где слияние выполняется путем передачи пути и файла методу добавления. Наконец, окончательный результат может быть получен с помощью 'merger.write ()', где получается объединенный контент с новым именем файла PDF.

Картинка выше указывает на «объединенный.pdf », который состоит из содержимого, объединенного из« test.pdf »и« test-1.pdf ».

Документы Word

Документы Word состоят из расширения «.docx» в конце имени файла. Эти документы содержат не только текст, как в обычных текстовых файлах, но и документ с расширенным текстом. Документ с форматированным текстом содержит различные структуры для документа, с которыми связаны размер, выравнивание, цвет, изображения, шрифт и т. Д.

Было бы лучше, если бы у вас было приложение для работы с документами Word.Популярным приложением для операционных систем Windows и Mac является Microsoft Word, но это платформа с платной подпиской. Однако есть бесплатная альтернатива, такая как «LibreOffice», приложение в Linux, которое поставляется предварительно установленным. Приложения можно загрузить для операционных систем Windows и Mac. В этом руководстве будет использоваться Microsoft Word в операционной системе Windows.

Шаги для установки пакета:

  1. Вам необходимо установить пакет с именем "python-docx", который может обрабатывать текстовые документы формата '.docx 'расширение.

  2. Вы можете увидеть установленный пакет python-docx, показанный ниже.

Вы можете писать код в интерактивной оболочке, предоставляемой Python, но предпочтительно использовать текстовый редактор. Итак, Sublime Text используется для кодирования в этом руководстве.

Написание документов Word

Вы можете видеть выше, что модуль «документ» импортируется из пакета «docx» в первой строке. Код во второй строке создает новый текстовый документ с помощью объекта Document.Имя файла сохраняется как first.docx с использованием document.save ().

Добавьте заголовок

Приведенный выше код содержит «Document ()» открывает новый файл, а «document.save ('addHeader.docx')» используется для создания недавно отредактированного файла docx. Вы можете добавить заголовок с помощью метода add_heading ('text,' level = number), который принимает текст как заголовок, а уровень заголовка начинается с 0 до 4.

Приведенный выше код дает результат в виде вновь созданного файла addedHeader.docx ', где уровень 0 создает заголовок с горизонтальной линией под текстом, а уровень заголовка 1 является основным заголовком. Точно так же другие заголовки представляют собой подзаголовки с размером шрифта в порядке убывания.

Добавить абзац

Приведенный выше код содержит «Document ()», который открывает новый файл документа, а «document.save ('addParagraph.docx')» используется для создания недавно отредактированного файла docx. Вы можете добавить заголовок с помощью метода add_paragraph ('text,') ', который принимает текст, а также' style '- необязательный аргумент, в котором можно использовать' List Number 'и' List Bullet '.

Приведенный выше код дает результат в виде вновь созданного файла «addedParagraph.docx», где в первой строке находится простой абзац. Точно так же есть заголовок, а под ним находится упорядоченный список, содержащий элемент с номерами 1 и 2. Ниже находится другой заголовок, содержащий два элемента в неупорядоченном маркированном списке.

Добавить изображение

Приведенный выше код содержит Document (), который создает новый файл документа, и document.save ('addPicture.docx ')' используется для создания вновь отредактированного файла docx. Вы можете добавить изображение с помощью add_picture (), который содержит первый параметр, поскольку cat-1.jpeg - это путь к изображению кошки. Ширина и высота - это необязательные параметры, которые по умолчанию будут иметь значение «72 dp», но для наших целей мы использовали «дюймы».

Приведенный выше код дает результат в виде вновь созданного файла «addedPicture.docx», который содержит изображение кошки, ширина и высота которого составляет 1,25 дюйма.

Чтение документов Word

Теперь вы прочитаете образец текстового документа из Python, и его можно найти по адресу:
Download Sample.

Первая строка кода импортирует документ из модуля 'docx', который используется для передачи необходимого файла документа и создания объекта.'ObtainText '- это функция, которая получает файл' fullText.docx '. Цикл выполняется для каждого абзаца, к которому обращается 'document.paragraphs' и который вставляется в пустой список с помощью метода 'append'.Наконец, функция возвращает список абзацев, заканчивающихся новой строкой.

Приведенный выше вывод дает простой текст без какого-либо стиля, цвета и т. Д., Который не является документом с форматированным текстом.

Поздравления

Поздравляю, вы закончили читать это руководство.

Если вы хотите узнать больше об импорте данных в Python, попробуйте курс DataCamp Introduction to Importing Data in Python.

Вы также можете просмотреть следующие ресурсы, чтобы расширить свои знания по конкретным темам.

  1. Документация Python Docx
  2. Документация PyPDF2

Ссылки:
Автоматизация скучных работ с помощью Python: работа с документами Word

Обработка файлов .docx и .xlsx с помощью Python

Документы

MS Office - наверное, один из самых неудобных и плохо формализованных источников данных. Гораздо лучше хранить все данные в специализированных базах данных или хотя бы в вики. Но в реальной жизни документы MS Office, особенно Excel и Word, активно используются практически в каждой организации.Просто потому, что это гибкий и простой инструмент, которым может пользоваться каждый. Вот почему важно знать автоматизированные способы обработки таких файлов.

Вы можете легко редактировать файлы .docx без каких-либо библиотек. Технически это просто zip-архив. Итак, вы можете разархивировать его, сделать замену в файле document.xml и снова заархивировать. Это намного лучше, чем иметь дело со старыми двоичными файлами .doc. Но есть и более изящные способы.

Допустим, нам нужно прочитать данные из.xlsx и сгенерируйте файлы .docx на основе некоторого существующего шаблона. Для работы с файлами .xlsx я буду использовать библиотеку openpyxl python.

библиотека openpyxl для обработки файлов .xlsx

Я установил библиотеку и открыл файл input / table.xlsx:

  #sudo pip install openpyxl
#sudo pip2 установить openpyxl

импортировать openpyxl

wb = openpyxl.load_workbook (имя файла = 'input / table.xlsx')
  

Теперь мы можем выбрать с помощью рабочего листа и получить значение некоторой ячейки:

  ws = wb.рабочие листы [1]

print (ws ["A1"]. значение)
  

Выход:

  Имя пользователя  

Хорошо. Мы можем прочитать одну ячейку. А что насчет главы стола? Если у нас в таблице 9 столбцов, мы можем сделать это так:

  для столбца в диапазоне (1, 10):
    print (ws.cell (столбец = столбец, строка = 1). значение)  

Выход:

  Имя пользователя
Фамилия
Атрибут1
Атрибут2
Атрибут3
Attribute4
Атрибут5
Атрибут6
Attribute7  

Если мы хотим прочитать всю таблицу (без заголовка), мы можем сделать это:

  first_cell_value = "1"
row = 2
  таблица  = dict ()
в то время как first_cell_value! = Нет:
    если не ws.row_dimensions [row] .hidden:
        таблица [строка] = dict ()
        для столбца в диапазоне (1, 10):
              таблица  [строка] [столбец] = ws.cell (столбец = столбец, строка = строка). Значение
    строка + = 1
    first_cell_value = ws.cell (столбец = 1, строка = строка) .value  

Обратите внимание, что я пропустил скрытые строки.

Из такой структуры таблицы мы можем получить все необходимое для анализа.

библиотека python-docx для обработки файлов .docx

Давайте разберемся, как работать с.docx файлы. Я установил библиотеку python-docx и открыл файл шаблона .docx:

  #sudo pip install python-docx
#sudo pip2 установить python-docx

импорт docx

документ = docx.Document (docx = 'input / template.docx')  

Вот как мы можем перебирать абзацы в файлах документов, находить ключевое слово « ИМЯ ПОЛЬЗОВАТЕЛЯ » и заменять его на необходимое значение «Джон»:

  импорт ре

для абзаца в документе. абзацы:
    если " ИМЯ ПОЛЬЗОВАТЕЛЯ " в абзаце.текст:
        paragraph.text = re.sub (" ИМЯ ПОЛЬЗОВАТЕЛЯ ", "Джон", paragraph.text)  

Что делать, если нам нужно прочитать или отредактировать таблицу в файле .docx? Таблицу можно прочитать так:

  для таблицы в document.tables:
    для строки в таблице. строк:
        для ячейки в row.cells:
            для абзаца в ячейке. абзацы:
                печать (абзац. текст)  

Чтобы вставить строки в таблицу, действуем так:

  rows_to_add = dict ()
rows_to_add [1] = ['1', '2', '3', '4']

для таблицы в документе.таблицы:
    для строки в rows_to_add:
        ячейки = table.add_row (). ячейки
        для n в диапазоне (0, len (rows_to_add [row]), 1):
            ячейки [n] .text = rows_to_add [row] [n]  

И, наконец, сохраните измененный шаблон в новый файл:

  document.save ('output / john_smith.docx')  

Привет! Меня зовут Александр, я специалист по автоматизации информационной безопасности. Вы можете узнать обо мне больше здесь. В настоящее время лучший способ подписаться на меня - мой канал в Telegram @avleonovcom.Я его обновляю чаще, чем этот сайт.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *