Модуль docx
Изучаю основы Python от Яндекс.Лицея и столкнулся с одной проблемой в модуле python-docx.
По задаче необходимо сформировать наклонно-жирный текст. В материалах об этом синтаксе ничего нет, в документации к модулю также ничего не смог найти.
Подскажите, пожалуйста, как можно преобразовать текст к жирному шрифту и одновременно к курсивному?
Код функции запихнул под спойлер. Не смог найти как здесь вставить файлы, сорян.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
from docx import Document def markdown_to_docx(text): result = text.split('\t') document = Document() for i in result[1:]: if i.startswith('#'): l = i.count('#') document.add_heading(i[l:], level=l) elif i.startswith('***') and i.endswith('***'): p = document.add_paragraph() p.add_run(i[3:-3]).bold = True elif i.startswith('**') and i.endswith('**'): p = document.add_paragraph() p.add_run(i[2:-2]).bold = True elif i.startswith('*') and i.endswith('*'): p = document.add_paragraph() p.add_run(i[1:-1]).italic = True elif i[0] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']: document.add_paragraph(i[3:], style='List Number') elif i.startswith('*') or i.startswith('+') or i.startswith('-'): document.add_paragraph(i[1:], style='List Bullet') else: document.add_paragraph(i) document.save('res.docx') markdown_to_docx('Text\trololo\t \t0. Нумерованный1\t1. Нумерованный2\t**ЖИРНЫЙ**\t***ЖИРНЫЙ КУРСИВ***\t*КУРСИВ*\t#ЗАГОЛОВОК\t##ЗАГОЛОВОК\t###ЗАГОЛОВОК' '\t*ненумерованный\t+ненумерованный\t-ненумерованный')
Как удалить модуль python docx
Можете ли вы удалить модули python? Я установил тот, который хотел бы удалить, и не могу понять, как это сделать.
Чтобы найти, где находится модуль, просто выполните:
или если это пакет:
Это уже было задано здесь.
Зайдите в каталог «site-packages» вашей установки python и удалите файлы вручную.
Если вы используете python под окнами, вам нужна следующая команда
В некоторых случаях вы можете установить разные версии модуля. Например, после того, как я установил lxml3.4.4 через pip, я также установил lxml3.5.0, используя его предварительно построенный двоичный файл, и, таким образом, приведенная выше команда удаляет только первую. Поэтому мне нужно запустить его twices
При импорте docx в python3.3 у меня возникает ошибка ImportError: нет модуля с именем «исключения»
Если вы хотите использовать import docx , убедитесь, что вы установили python-docx , а не docx. Вы можете установить модуль, запустив pip install python-docx .
Установочное имя docx предназначено для другого модуля. Однако
когда вы собираетесь импортировать модуль python-docx, вам нужно будет запустить import docx , а не import python-docx .
если вы все еще хотите использовать модуль docx, тогда :
Прежде всего, вам необходимо убедиться, что модуль docx установлен. Если нет, то просто беги pip install docx . Если он показывает «* требование уже выполнено *», то решение:
Remove an imported python module [duplicate]
Unloading a module from Python is not supported.
Not the answer you're looking for? Browse other questions tagged python or ask your own question.
Linked
Related
Hot Network Questions
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.11.26.40833
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Похожие публикации:
- Как установить библиотеку docx в python
- Как открыть docx в whatsapp
- Что такое модуль в python что такое пакет в python в чем разница между пакетом и модулем
- Как установить модуль в python
pycharm не видит модули python-docx
Необходим был модуль для работы с документами, собственно выбор пал на python-docx , да и в принципе другого выбора то и нет. Установил pip install python-docx + lxml последней версии на всякий случай. Python использовал последний 3.5.10. Установил python-docx с 50 раза), так как постоянно pycharm то выдавал ошибки разные, то выдавал сообщение об успешной установке, но в папке с модулями нечего не было. В общем все установилось, import docx работает, pycharm его видит. Взял тестовый код из тех. документации:
self.document = docx.Document() p = self.document.add_paragraph('A plain paragraph having some ') self.document.save('demo.docx')
Инициализацию docx.Document() pycharm видит, но функции класса Document() не видит. Давайте разбираться в чем проблема. Как видно на скрине, в папке с модулями для pycharm , все норм установлено: Едем дальше, посмотрим на какой класс ссылается import docx :
Как видим он ссылается на инициализацию всего API . Далее проверим, на что ссылается docx.Document() :
Как видим, ссылается на класс API.py в котором есть функция инициализации def Document() , которая должна возвращать класс document_part.document , который судя по всему должен все таки вернуть класс Document , НО. нечего не возвращает. Но если запустить данный код с предупреждениями, все отработает конечно же отлично! Как исправить проблемы в pycharm ? Я пробовал invalidateCaches , переустановку pycharm и python , переустановку всех модулей и установку модулей вручную. p.s. Pycharm последней версии.
Работа с объектом Style модуля docx-python
Доступ к стилям документа осуществляется с помощью атрибута Document.styles . Возвращаемый объект представляет собой последовательность, который хранит все встроенные в редактор MS Word, а так же созданные пользователем объекты стилей Style . Обращаться к этой последовательности можно как к словарю.
>>> from docx import Document >>> doc = Document() # получаем все стили определенные стили >>> all_styles = doc.styles # получаем объект `Style` по имени >>> all_styles['Normal'] # _ParagraphStyle('Normal') id: 140214642449472
Важно. Встроенные стили хранятся в файле WordprocessingML под своим английским именем, например ‘Heading 1’ , и не зависят от локализации MS Word. Так как модуль python-docx работает с файлом WordprocessingML , то поиск стиля должен использовать английское имя. Если файл WordprocessingML не найден (MS Word не установлен, например в OS Linux) то модуль python-docx работает со своей версией этого файла. Что бы создать сопоставление между именами стилей на русском языке и именами на английском языке посетите эту ссылку.
Пользовательские стили, также известные как настраиваемые стили, не локализованы и доступны по имени, как оно отображается в пользовательском интерфейсе Word.
Используя свойство идентификации стиля Style.type и перечисление WD_STYLE_TYPE можно создавать подмножества определенных стилей. Например, этот код создаст список стилей абзаца:
>>> from docx import Document >>> from docx.enum.style import WD_STYLE_TYPE >>> doc = Document() >>> all_styles = doc.styles >>> paragraph_styles = [s for s in all_styles if s.type == WD_STYLE_TYPE.PARAGRAPH] >>> for style in paragraph_styles: . print(style.name) # Normal # Header # Footer # Heading 1 .
Каждый из объектов документа DOCX: абзац Paragraph , прогон Run и таблица Table имеет атрибут стиля .style (например Paragraph.style ). Назначение этому атрибуту объекта стиля Style или имени стиля, применяет этот стиль соответствующему объекту:
>>> from docx import Document >>> doc = Document() >>> p = doc.add_paragraph() # имя стиля созданного абзаца >>> p.style.name # 'Normal' # присвоение созданному абзацу # нового стиля, как объекта >>> p.style = doc.styles['Heading 1'] # можно поменять стиль, просто # присвоив имя стиля >>> p.style = 'Heading 1' >>> p.style.name # 'Heading 1'
Стиль Style также можно применить во время создания, используя либо объект стиля, либо его имя:
# применяем стиль по имени >>> p = doc.add_paragraph(style='Body Text') >>> p.style.name # 'Body Text' # применяем стиль по имени >>> text_style = doc.styles['Body Text'] # применяем стиль как объект >>> p = doc.add_paragraph(style=text_style) >>> p.style.name 'Body Text'
Добавление/удаление пользовательского стиля документа.
О стилях в модуле python-docx можно думать как об определении CSS-классов в начале HTML-документа, а потом их применении к HTML-тегам. Например, после создания абзаца Paragraph можно изменить отдельные свойства его стиля: шрифт (размер, название), форматирование параграфа (межстрочный интервал, отступы) и т.д. Так вот, лучше всего создать пользовательский стиль (подобно CSS-классу), который объединит эти свойства в какую-то группу, а потом применять его при добавлении абзацев.
Пользовательские стили создаются и добавляются (преимущественно сразу после создании объекта документа) при помощи метода Document.styles.add_style(name, style_type, builtin=False) , при этом, необходимо указать его уникальное (произвольное) имя name и тип, к которому относится создаваемый стиль style_type (задается перечислением WD_STYLE_TYPE ).
Важно! Стиль, созданный, для абзаца (с типом WD_STYLE_TYPE.PARAGRAPH ) нельзя применить, например, к таблице Table , так как тип стиля будет отличатся WD_STYLE_TYPE.TABLE .
from docx import Document from docx.shared import Pt from docx.enum.style import WD_STYLE_TYPE from docx.enum.text import WD_ALIGN_PARAGRAPH doc = Document() # создаем пользовательский стиль заголовка, с именем UserHead1 style = doc.styles.add_style('UserHead1', WD_STYLE_TYPE.PARAGRAPH) style.font.name = 'Arial' style.font.size = Pt(21) style.font.underline = True style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # Добавляем контент doc.add_paragraph('Пользовательский заголовок.', style='UserHead1') doc.add_paragraph('Текст первого абзаца страницы 1' * 10) doc.add_page_break() doc.add_paragraph('Пользовательский заголовок.', style='UserHead1') doc.add_paragraph('Текст первого абзаца страницы 2' * 10) doc.save('test.docx')
Объект стиля можно удалить из документа, просто вызвав его метод doc.styles[‘ИмяСтиля’].delete() :
>>> from docx import Document >>> doc = Document() >>> styles = doc.styles >>> len(styles) # 164 >>> styles['Body Text'].delete() >>> len(styles) # 163
Изменение существующего стиля документа.
Изменение существующего стиля документа, рассмотрим на встроенном стиле по умолчанию Получить стиль по умолчанию для конкретного типа можно при помощи свойства doc.styles.default(style_type) :
Получим стиль абзаца по умолчанию:
>>> from docx import Document >>> from docx.enum.style import WD_STYLE_TYPE >>> doc = Document() # получим стиль абзаца по умолчанию >>> style = doc.styles.default(WD_STYLE_TYPE.PARAGRAPH) >>> style.name 'Normal'
Имя стиля по умолчанию для абзаца документа MS Word является Normal . Изменение настроек этого стиля в любом месте кода Python применит сделанные изменения ко всему документу DOCX.
from docx import Document from docx.shared import Mm, Pt doc = Document() # добавим несколько абзацев с контентом doc.add_paragraph('Текст первого абзаца. ' * 5) doc.add_paragraph('Текст второго абзаца.' * 5) doc.add_paragraph('Текст третьего абзаца. ' * 5) doc.add_paragraph('Текст четвертого абзаца.' * 5) # Меняем стиль абзаца по умолчанию: # получаем объект стиля `Normal` style = doc.styles['Normal'] # изменяем настройки шрифта style.font.name = 'Arial' style.font.size = Pt(14) # настраиваем красную строку абзаца style.paragraph_format.first_line_indent = Mm(15) doc.save('test.docx')
Методы и свойства объекта Style .
- Style.base_style объект стиля, от которого наследуется этот стиль,
- Style.builtin возвращает True если этот стиль является встроенным,
- Style.delete() удаляет этот стиль из документа,
- Style.element XML-элемент, проксируемый объектом этого стиля,
- Style.name имя этого стиля в интерфейсе MS Word,
- Style.type тип этого стиля, как член перечисления WD_STYLE_TYPE ,
- Style.font объект Font этого стиля,
- Style.next_paragraph_style стиль, применяться к новому абзацу,
- Style.paragraph_format объект ParagraphFormat этого стиля.
Style.base_style :
Свойство Style.base_style возвращает/устанавливает объект стиля, от которого наследуется этот стиль, или None , если этот стиль не основан на другом стиле.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.builtin :
Свойство Style.builtin возвращает True если этот стиль является встроенным стилем. False указывает, что это пользовательский (определяемый пользователем) стиль. Свойство, только для чтения.
Обратите внимание, что это значение основано на наличии атрибута customStyle в XML, а не на конкретных знаниях о том, какие стили встроены в Word.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.delete() :
Метод Style.delete() удаляет это определение стиля из документа.
Обратите внимание, что вызов этого метода не удаляет и не изменяет стиль, применяемый к содержимому документа. Элементы содержимого, имеющие удаленный стиль, будут отображаться с использованием стиля по умолчанию, как и любое содержимое со стилем, не определенным в документе.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.element :
Свойство Style.element XML-элемент, проксируемый объектом этого стиля.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.name :
Свойство Style.name возвращает/устанавливает имя этого стиля в пользовательском интерфейсе MS Word.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.type :
Свойство Style.type возвращает/устанавливает соответствующий тип этого стиля, как член перечисления WD_STYLE_TYPE .
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.font :
Свойство Style.font это объект Font , предоставляющий доступ к свойствам форматирования символов для этого стиля, таким как имя и размер шрифта, цвет и т.д.
Примечание. Свойство доступно для объектов Paragraph.style , Run.style и Table.style .
Style.next_paragraph_style :
Свойство Style.next_paragraph_style это объект ParagraphFormat , представляющий стиль, который будет автоматически применяться к новому абзацу, вставленному после абзаца этого стиля.
Возвращает self , если стиль следующего абзаца не определен. Назначение None или self удаляет настройку, так что новые абзацы создаются с использованием того же стиля.
Примечание. Свойство доступно для ТОЛЬКО объектов Paragraph.style и Table.style .
Style.paragraph_format :
Свойство Style.paragraph_format это объект ParagraphFormat , представляющий доступ к свойствам форматирования абзаца для этого стиля, таким как отступ, межстрочный интервал и т. д.
Примечание. Свойство доступно для ТОЛЬКО объектов Paragraph.style и Table.style .
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Изменение макета документа, модуль python-docx
- Работа с текстом, модуль python-docx
- Работа с таблицей при помощи модуля python-docx
- Работа с объектом Style модуля docx-python
- Работа с рисунками, модуль python-docx
- Объект Document модуля python-docx
- Объект Section() модуля python-docx
- Объект Paragraph модуля python-docx
- Объект Run модуля python-docx
- Объект Table модуля python-docx
- Объект Font модуля python-docx
- Объект ParagraphFormat модуля python-docx, форматирование абзаца
- Объект длинны Length модуля python-docx
- Константы/перечисления модуля python-docx
- Создание документов DOCX из шаблонов jinja2
