与Python的Markdown合作
#python #markdown

本文最初是由Ravgeet DhillonHoneybadger Developer Blog上撰写的。

如果您使用Internet,那么您肯定会遇到这个术语 Markdown Markdown是一种轻巧的标记语言,使得编写格式的内容非常容易。它是由John Gruber和Aaron Swartz于2004年创建的。它使用了非常易于记录的语法,因此被世界各地的许多博客作者和内容作家使用。即使您正在阅读的博客也使用Markdown编写和格式化。

Markdown是用于存储格式数据的最广泛使用的格式之一。它可以轻松地与Web技术集成,因为它可以使用Markdown编译器转换为HTML或反之亦然。它允许您编写HTML实体,例如标题,列表,图像,链接,表格等,而无需太多努力或代码。它用于博客,内容管理系统,Wiki,文档和更多地方。

在本文中,您将学习如何使用不同的Python软件包在Python应用程序中使用Markdown,包括Markdown,Front Matter和Markdownify。

先决条件

要与本教程一起,您将需要以下内容:

  • python v3.x
  • 对HTML和Markdown的基本理解

设置项目

在进行该项目之前,您需要设置一个项目目录才能工作。

因此,首先,打开终端,导航到您选择的路径,并通过在终端中运行以下命令来创建项目目录(python-markdown):

mkdir python-markdown
cd python-markdown

最后,通过运行以下命令来为您的Python项目创建和激活虚拟环境(venv):

python3 -m venv
source venv/bin/activate

就是这样。项目设置已完成。

在Python中转换为HTML

与降价相关的最常见操作之一是将其转换为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方法将降价(markdown_string)转换为html(html_string)。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

代码执行完成后,您将获得HTML输出,如下:

Markdown to HTML.

您可以尝试一个更复杂的标记字符串,例如下面的代码中的字符串,并使用它来创建HTML:

markdown_string = '''
# Hello World

This is a **great** tutorial about using Markdown in [Python](https://python.org).
'''

在此示例中,您使用标题,大胆的文本和Markdown中的链接。

Markdown to HTML.

将降价文件转换为python中的html

大多数时候,您会使用降价文件而不是降价字符串。因此,学习如何将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方法将降价(markdown_string)转换为html(html_string)。
  3. 创建一个sample.html文件并将html(html_string)写入它。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

执行代码后,您将在项目的根目录中看到一个sample.html文件:

Markdown file to HTML file.

将HTML转换为Python中的降价

有时,您可能想将HTML转换为Markdown的情况。为此,您可以使用Python中的markdownify软件包。

首先,通过在终端中运行以下命令来安装软件包:

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. 使用markdownify软件包的markdownify方法将HTML(html_string)转换为Markdown(markdown_string)。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

代码执行完成后,您将获得降价输出:

HTML to Markdown.

如果您看到上面的输出,则会看到用“下划线”相同的符号(=)创建的标题(<h1>),而不是从主题标签(#)开始。这是因为Markdown带有两种样式的标题: setext atx ,默认情况下,Markdown Parser使用setExt-style-style标头。您可以通过将heading_style='ATX'参数传递到markdownify方法。

Markdownify还支持number of options,包括HTML标签剥离,HTML标签转换,Markdown标题样式等。

将HTML文件转换为Python中的Markdown

以前,我们将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. 使用markdownify软件包的markdownify方法将HTML(html_string)转换为Markdown(markdown_string)。
  3. 创建一个sample.md文件并将Markdown(markdown_string)写入它。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

执行代码后,您将在项目的根目录中看到一个sample.md文件,如下所示:

HTML file to Markdown file.

阅读python中的降价前锋事物

在Markdown的世界中,通常有一些与Markdown文件关联的变量或元数据。这被称为前提。前物质数据变量是存储有关Markdown文件的额外信息的好方法。例如,博客的标记文件可以具有 title 作者 image 的正面变量em>等等。

您可以通过将YAML数据变量放在三重划分线之间来指定在Markdown文件的开头。例如,

---
title: "Hello World"
Author: John Doe
published: 2020-01-20
---

在python中,您可以使用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. 使用frontmatter软件包中的load方法读取sample.md文件,并将结果存储在data变量中。
  3. data.keys()的帮助下访问前物质变量。由于data是字典,因此您也可以访问单个键(data['title']data['date'])。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

代码执行完成后,您将获得前提变量的输出,如下所示:

Markdown front matter data.

更新Python中的Markdown Front物质

有时,您可能想将HTML转换为Markdown的情况。为此,您可以使用Python的markdownify软件包。

您还可以更新现有的前提数据变量或使用前提软件包添加新变量。

要这样做,首先,用以下内容替换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. 阅读(frontmater.load()sample.md文件。
  2. 在前面的data变量中添加新密钥(author)并为其分配一个值(John Doe)。
  3. 更新现有密钥(title)并为其分配一个新值(Bye World)。
  4. 序列化(frontmatter.dumps()data变量 string 并将结果存储在updated_data变量中。
  5. 通过将更新的Markdown(updated_data)编写为
  6. 来更新sample.md文件。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

完成代码执行后,请检查sample.md文件中是否有更新的正面数据,如下:

Updated Markdown front matter data.

使用Python Markdown Extensions

python-markdown软件包还支持扩展,使您可以修改和/或扩展Markdown Parser的默认行为。例如,要生成一个目录(TOC),您可以使用toc extension。还有other extensions,您可以根据自己的要求来使用它们。

要为您的Markdown Content创建一个TOC,首先,用以下内容替换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. 在您要添加目录的标记(markdown_string)中指定[TOC]字符串。
  2. extensions参数添加到markdown方法中的markdown方法并指定要使用的扩展名(['toc'])。

最后,保存您的代码并通过在终端中运行以下命令来运行main.py文件:

python main.py

代码执行完成后,您将以目录作为列表获得HTML输出:

Table of Contents.

结论

学习与Markdown合作可以通过多种方式为您提供帮助。使用Python,您可以自动化许多任务,包括维护和操纵Markdown文件。例如,您可以编写一个脚本,该脚本为您的博客中的所有标记文件创建索引,或者根据前提数据变量(例如标签/类别)将标记文件组织到不同的目录中。

Honeybadger是一个基于云的系统,用于实时监视,错误跟踪和异常捕获,还使用Markdown来维护我们的文档。如果您有兴趣,我们写了一篇博客文章,我们在其中谈论了我们的built a documentation workflow in Rails