Работа с Markdown в Python
Если вы пользуетесь Интернетом, вы наверняка сталкивались с термином Markdown. Markdown - это облегченный язык разметки, который позволяет очень легко писать форматированный контент. Он был создан Джоном Грубером и Аароном Шварцем в 2004 году. Он использует очень простой для запоминания синтаксис и поэтому используется многими блоггерами и авторами контента по всему миру. Даже этот блог, который вы читаете, написан и отформатирован с использованием Markdown.
Markdown - один из наиболее широко используемых форматов для хранения форматированных данных. Он легко интегрируется с веб-технологиями, так как может быть преобразован в HTML или наоборот с помощью компиляторов Markdown. Это позволяет вам писать HTML-объекты, такие как заголовки, списки, изображения, ссылки, таблицы и многое другое, без особых усилий или кода. Он используется в блогах, системах управления контентом, Wiki, документации и многих других местах.
Здесь мы раскроем тему как работать с Markdown в приложении Python, используя различные пакеты Python, включая markdown, front matter и markdownify.
Чтобы следовать нашей теме, вам понадобится следующее:
- Python v3.x
- Базовое понимание HTML и Markdown
Настройка проекта
Прежде чем приступить к проекту, вам нужно будет настроить каталог проекта для работы.
Итак, сначала откройте свой терминал, перейдите по выбранному вами пути и создайте каталог проекта (python-markdown
), выполнив следующие команды в терминале:
mkdir python-markdown
cd python-markdown
Наконец, создайте и активируйте виртуальную среду (venv
) для вашего проекта на Python, выполнив следующие команды:
python3 -m venv
source venv/bin/activate
Настройка проекта завершена.
Преобразование Markdown в HTML в Python
Одной из наиболее распространенных операций, связанных с Markdown, является преобразование его в HTML. Поступая таким образом, вы можете записать свой контент в Markdown, а затем скомпилировать его в HTML, который затем можно развернуть на CDN или сервере.
Сначала установите пакет python-markdown, выполнив следующую команду в терминале:
pip install markdown
Затем в корневом каталоге вашего проекта создайте main.py
файл и добавьте к нему следующий код:
# 1
import markdown
markdown_string = '# Hello World'
# 2
html_string = markdown.markdown(markdown_string)
print(html_string)
В приведенном выше коде вы делаете следующее:
- Импорт модуля
markdown
. - Преобразование markdown (
markdown_string
) в HTML (html_string
) с использованием метода markdown из пакета markdown.
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы получите следующий HTML-вывод:
Вы можете попробовать более сложную строку Markdown, подобную приведенной в приведенном ниже коде, и использовать ее для создания HTML:
markdown_string = '''
# Hello World
This is a **great** tutorial about using Markdown in [Python](https://python.org).
'''
В этом примере вы используете заголовки, выделенный жирным шрифтом текст и ссылки в Markdown.
Преобразование файла Markdown в HTML на Python
Большую часть времени вы будете работать с файлами Markdown, а не со строками Markdown. Поэтому имеет смысл узнать, как преобразовать файл Markdown в HTML-файл.
Чтобы сделать это, сначала создайте sample.md
файл и добавьте к нему следующий код:
# Hello World
This is a **Markdown** file.
Затем замените существующий код в main.py
файл со следующим:
import markdown
# 1
with open('sample.md', 'r') as f:
markdown_string = f.read()
# 2
html_string = markdown.markdown(markdown_string)
# 3
with open('sample.html', 'w') as f:
f.write(html_string)
В приведенном выше коде вы делаете следующее:
- Читая
sample.md
и сохранение его содержимого в переменнойmarkdown_string
. - Преобразование markdown (
markdown_string
) в HTML (html_string
) с использованием методаmarkdown
из пакетаmarkdown
. - Создание
sample.html
файл и запись в него HTML (html_string
).
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы увидите sample.html
файл в корневом каталоге вашего проекта:
Преобразование HTML в Markdown в Python
Иногда возникает ситуация, когда вы, возможно, захотите преобразовать HTML в Markdown. Для этой цели вы можете использовать пакет markdownify на Python.
Сначала установите пакет, выполнив следующую команду в терминале:
pip install markdownify
Затем замените существующий код в main.py
файл со следующим:
# 1
import markdownify
html_string = '''
<h1>Hello World</h1>
<p>This is a great tutorial about using Markdown in Python.</p>
'''
# 2
markdown_string = markdownify.markdownify(html_string)
print(markdown_string)
В приведенном выше коде вы делаете следующее:
- Импорт модуля
markdownify
. - Преобразование HTML (
html_string
) в Markdown (markdown_string
) с использованием методаmarkdownify
из пакетаmarkdownify
.
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы получите вывод Markdown:
Если вы видите результат выше, вы увидите заголовки (<h1>
), созданные с помощью "подчеркивания" со знаками равенства (=
) вместо того, чтобы начинаться с хэштегов (#
). Это связано с тем, что Markdown поставляется с двумя стилями заголовков: Setext и atx, и по умолчанию анализатор Markdown использует заголовки в стиле Setext. Вы настраиваете markdownify на использование заголовков в стиле ATX, передавая параметр heading_style='ATX'
методу markdownify
.
Markdownify также поддерживает ряд опций, включая удаление тегов HTML, преобразование тегов HTML, стили заголовков Markdown и многое другое.
Преобразование HTML-файла в Markdown на Python
Ранее мы преобразовали файл Markdown в HTML-файл. Однако иногда вам может потребоваться преобразовать HTML-файл в файл Markdown.
Чтобы сделать это, сначала создайте sample.html
файл и добавьте к нему следующий код:
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Hello World</h1>
<p>This is a <strong>HTML</strong> file.</p>
<a href="https://honeybadger.io/">Visit Honeybadger</a>
</body>
</html>
Затем замените существующий код в main.py
файл со следующим:
import markdownify
# 1
with open('sample.html', 'r') as f:
html_string = f.read()
# 2
markdown_string = markdownify.markdownify(html_string, heading_style='ATX')
# 3
with open('sample.md', 'w') as f:
f.write(markdown_string)
В приведенном выше коде вы делаете следующее:
- Читая
sample.html
и сохраняющий его содержимое в переменнойhtml_string
. - Преобразование HTML (
html_string
) в Markdown (markdown_string
) с использованием методаmarkdownify
из пакетаmarkdownify
. - Создание
sample.md
файл и запись в него уценки (markdown_string
).
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы увидите sample.md
файл в корневом каталоге вашего проекта следующим образом:
Чтение интерфейса Markdown в Python
В мире Markdown часто существуют некоторые переменные или метаданные, связанные с файлом Markdown. Это известно как front matter. Переменные данных front matter - отличный способ сохранить дополнительную информацию о файле Markdown. Например, файлы markdown блога могут содержать такие переменные, как Заголовок, Автор, Изображение, Опубликовано на и многое другое.
Вы можете указать front matter в начале файла Markdown, поместив переменные данных YAML между тройными пунктирными линиями. Например,
---
title: Hello World
Author: John Doe
Published: 2020-01-20
---
В Python вы можете проанализировать Markdown front matter с помощью пакета python-front matter.
Чтобы увидеть этот пакет в действии, сначала установите пакет, выполнив следующую команду в терминале:
pip install python-frontmatter
Затем добавьте следующий передний материал к sample.md
файл:
---
title: Hello World
date: 2022-01-20
---
Затем замените существующий код в main.py
файл со следующим:
# 1
import frontmatter
# 2
data = frontmatter.load('sample.md')
# 3
print(data.keys())
print(data['title'])
print(data['date'])
В приведенном выше коде вы делаете следующее:
- Импорт модуля
frontmatter
. - Читая
sample.md
файл, используя методload
из пакетаfrontmatter
и сохраняя результат в переменнойdata
. - Доступ к переменным front matter осуществляется с помощью
data.keys()
. Поскольку данные представляют собой словарь, вы также можете получить доступ к отдельным ключам (data['title']
илиdata['date']
).
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы получите выходные данные переменных front matter следующим образом:
Обновление интерфейса Markdown в Python
Иногда возникает ситуация, когда вы, возможно, захотите преобразовать HTML в Markdown. Для этой цели вы можете использовать пакет markdownify от Python.
Вы также можете обновить существующие переменные данных front matter или добавить новые с помощью пакета front matter.
Чтобы сделать это, сначала замените существующий код в main.py
файл со следующим:
import frontmatter
# 1
data = frontmatter.load('sample.md')
# 2
data['author'] = 'John Doe'
# 3
data['title'] = 'Bye World'
# 4
updated_data = frontmatter.dumps(data)
# 5
with open('sample.md', 'w') as f:
f.write(updated_data)
В приведенном выше коде вы делаете следующее:
- Считывание (
frontmatter.load()
) sample.md файл. - Добавление нового ключа (
author
) к переменной данных front matter и присвоение ей значения (John Doe
). - Обновление существующего ключа (
title
) и присвоение ему нового значения (Bye World
). - Сериализация (
frontmatter.dumps()
) переменной данных в строку и сохранение результата в переменнойupdated_data
. - Обновление
sample.md
файл, записав в него обновленную уценку (updated_data
).
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, проверьте sample.md
файл для обновленных исходных данных следующим образом:
Использование расширений Python Markdown
Пакет python-markdown также поддерживает расширения, которые позволяют изменять и/или расширять поведение анализатора Markdown по умолчанию. Например, для создания оглавления (TOC) вы можете использовать расширение toc. Существуют и другие расширения, которые вы можете использовать в зависимости от ваших требований.
Чтобы создать TOC для вашего содержимого Markdown, сначала замените существующий код в main.py
файл со следующим:
import markdown
# 1
markdown_string = '''
[TOC]
# Hello World
This is a **great** tutorial about using Markdown in [Python](https://python.org).
# Bye World
'''
# 2
html_string = markdown.markdown(markdown_string, extensions=['toc'])
print(html_string)
В приведенном выше коде вы делаете следующее:
- Укажите строку [
TOC
] в вашей уценке (markdown_string
), куда вы хотите добавить оглавление. - Добавление параметра
extensions
к методуmarkdown
из пакетаmarkdown
и указание расширений (['to c']
), которые вы хотите использовать.
Наконец, сохраните свой код и запустите main.py
файл, выполнив следующую команду в терминале:
python main.py
Как только выполнение кода будет завершено, вы получите HTML-вывод с оглавлением в виде списка:
Заключение
Обучение работе с Markdown может помочь вам во многих отношениях. Используя Python, вы можете автоматизировать многие задачи, включая ведение файлов Markdown и манипулирование ими. Например, вы можете написать скрипт, который создает индекс для всех ваших файлов Markdown в вашем блоге или упорядочивает ваши файлы Markdown по разным каталогам на основе переменных данных front matter, таких как теги/категории.
Honeybadger, представляющая собой облачную систему для мониторинга в режиме реального времени, отслеживания ошибок и исключения, также использует Markdown для ведения документации.