DevGang
Авторизоваться

Работа с Markdown в Python

Если вы пользуетесь Интернетом, вы наверняка сталкивались с термином Markdown. Markdown - это облегченный язык разметки, который позволяет очень легко писать форматированный контент. Он был создан Джоном Грубером и Аароном Шварцем в 2004 году. Он использует очень простой для запоминания синтаксис и поэтому используется многими блоггерами и авторами контента по всему миру. Даже этот блог, который вы читаете, написан и отформатирован с использованием Markdown.

Markdown - один из наиболее широко используемых форматов для хранения форматированных данных. Он легко интегрируется с веб-технологиями, так как может быть преобразован в HTML или наоборот с помощью компиляторов Markdown. Это позволяет вам писать HTML-объекты, такие как заголовки, списки, изображения, ссылки, таблицы и многое другое, без особых усилий или кода. Он используется в блогах, системах управления контентом, Wiki, документации и многих других местах.

Здесь мы раскроем тему как работать с Markdown в приложении Python, используя различные пакеты Python, включая markdown, front matter и markdownify.

Чтобы следовать нашей теме, вам понадобится следующее:

  1. Python v3.x
  2. Базовое понимание 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)

В приведенном выше коде вы делаете следующее:

  1. Импорт модуля markdown.
  2. Преобразование 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)

В приведенном выше коде вы делаете следующее:

  1. Читая sample.md и сохранение его содержимого в переменной markdown_string.
  2. Преобразование markdown (markdown_string) в HTML (html_string) с использованием метода markdown из пакета markdown.
  3. Создание 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)

В приведенном выше коде вы делаете следующее:

  1. Импорт модуля markdownify.
  2. Преобразование 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)

В приведенном выше коде вы делаете следующее:

  1. Читая sample.html и сохраняющий его содержимое в переменной html_string.
  2. Преобразование HTML (html_string) в Markdown (markdown_string) с использованием метода markdownify из пакета markdownify.
  3. Создание 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'])

В приведенном выше коде вы делаете следующее:

  1. Импорт модуля frontmatter.
  2. Читая sample.md файл, используя метод load из пакета frontmatter и сохраняя результат в переменной data.
  3. Доступ к переменным 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)

В приведенном выше коде вы делаете следующее:

  1. Считывание (frontmatter.load()) sample.md файл.
  2. Добавление нового ключа (author) к переменной данных front matter и присвоение ей значения (John Doe).
  3. Обновление существующего ключа (title) и присвоение ему нового значения (Bye World).
  4. Сериализация (frontmatter.dumps()) переменной данных в строку и сохранение результата в переменной updated_data.
  5. Обновление 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)

В приведенном выше коде вы делаете следующее:

  1. Укажите строку [TOC] в вашей уценке (markdown_string), куда вы хотите добавить оглавление.
  2. Добавление параметра extensions к методу markdown из пакета markdown и указание расширений (['to c']), которые вы хотите использовать.

Наконец, сохраните свой код и запустите main.py файл, выполнив следующую команду в терминале:

python main.py

Как только выполнение кода будет завершено, вы получите HTML-вывод с оглавлением в виде списка:

Заключение

Обучение работе с Markdown может помочь вам во многих отношениях. Используя Python, вы можете автоматизировать многие задачи, включая ведение файлов Markdown и манипулирование ими. Например, вы можете написать скрипт, который создает индекс для всех ваших файлов Markdown в вашем блоге или упорядочивает ваши файлы Markdown по разным каталогам на основе переменных данных front matter, таких как теги/категории.

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

#HTML #Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу