本文最初是由Ravgeet Dhillon在Honeybadger 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)
在上述代码中,您正在执行以下操作:
- 导入
markdown
模块。 - 使用
markdown
软件包的markdown
方法将降价(markdown_string
)转换为html(html_string
)。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
代码执行完成后,您将获得HTML输出,如下:
您可以尝试一个更复杂的标记字符串,例如下面的代码中的字符串,并使用它来创建HTML:
markdown_string = '''
# Hello World
This is a **great** tutorial about using Markdown in [Python](https://python.org).
'''
在此示例中,您使用标题,大胆的文本和Markdown中的链接。
将降价文件转换为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)
在上述代码中,您正在执行以下操作:
- 阅读
sample.md
并将其内容存储在markdown_string
变量中。 - 使用
markdown
软件包的markdown
方法将降价(markdown_string
)转换为html(html_string
)。 - 创建一个
sample.html
文件并将html(html_string
)写入它。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
执行代码后,您将在项目的根目录中看到一个sample.html
文件:
将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)
在上述代码中,您正在执行以下操作:
- 导入
markdownify
模块。 - 使用
markdownify
软件包的markdownify
方法将HTML(html_string
)转换为Markdown(markdown_string
)。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
代码执行完成后,您将获得降价输出:
如果您看到上面的输出,则会看到用“下划线”相同的符号(=)创建的标题(<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)
在上面的代码中,您要执行以下操作:
- 阅读
sample.html
并将其内容存储在html_string
变量中。 - 使用
markdownify
软件包的markdownify
方法将HTML(html_string
)转换为Markdown(markdown_string
)。 - 创建一个
sample.md
文件并将Markdown(markdown_string
)写入它。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
执行代码后,您将在项目的根目录中看到一个sample.md
文件,如下所示:
阅读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'])
在上述代码中,您正在执行以下操作:
- 导入
frontmatter
模块。 - 使用
frontmatter
软件包中的load
方法读取sample.md
文件,并将结果存储在data
变量中。 - 在
data.keys()
的帮助下访问前物质变量。由于data
是字典,因此您也可以访问单个键(data['title']
或data['date']
)。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
代码执行完成后,您将获得前提变量的输出,如下所示:
更新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)
在上述代码中,您正在执行以下操作:
- 阅读(
frontmater.load()
)sample.md
文件。 - 在前面的
data
变量中添加新密钥(author
)并为其分配一个值(John Doe
)。 - 更新现有密钥(
title
)并为其分配一个新值(Bye World
)。 - 序列化(
frontmatter.dumps()
)data
变量 string 并将结果存储在updated_data
变量中。 - 通过将更新的Markdown(
updated_data
)编写为 来更新
sample.md
文件。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
完成代码执行后,请检查sample.md
文件中是否有更新的正面数据,如下:
使用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)
在上述代码中,您正在执行以下操作:
- 在您要添加目录的标记(
markdown_string
)中指定[TOC]
字符串。 - 将
extensions
参数添加到markdown
方法中的markdown
方法并指定要使用的扩展名(['toc']
)。
最后,保存您的代码并通过在终端中运行以下命令来运行main.py
文件:
python main.py
代码执行完成后,您将以目录作为列表获得HTML输出:
结论
学习与Markdown合作可以通过多种方式为您提供帮助。使用Python,您可以自动化许多任务,包括维护和操纵Markdown文件。例如,您可以编写一个脚本,该脚本为您的博客中的所有标记文件创建索引,或者根据前提数据变量(例如标签/类别)将标记文件组织到不同的目录中。
Honeybadger是一个基于云的系统,用于实时监视,错误跟踪和异常捕获,还使用Markdown来维护我们的文档。如果您有兴趣,我们写了一篇博客文章,我们在其中谈论了我们的built a documentation workflow in Rails。