python解析markdown_fluent-python-translate

Python 3 实现 markdown 文本解析器

一、课程描述

本次课程我们将使用 Python 3 打造 Markdown 文本解析器,并且程序支持输出 HTML 格式与 PDF 格式的文件。

1.1 课程知识点

通过本次课程的学习,我们将接触到以下知识点:

正则表达式

docopt 构建命令行解析器

简单的 HTML 语法

1.2 试验流程

实验的流程为:

附加依赖安装

编程实现

运行程序

1.3 实验截图

转换效果如下:

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

二、附加依赖安装

在安装附加依赖软件包之前,先更新已安装的软件包,避免在安装的过程中出现问题。

$ sudo apt-get update

2.1 安装 wkhtmltopdf

wkhtmltopdf 是一款能将 HTML 文件转化为 PDF 文件的工具,支持 UNIX 平台与Windows 平台。

$ sudo apt-get install wkhtmltopdf

更多参考:

wkhtmltopdf 官方网站

2.2 安装 docopt

docopt 是 Python 的一个第三方参数解析库,可以根据使用者提供的文档描述自动生成解析器。因此使用者可以用它来定义参数与解析参数。

$ sudo pip3 install docopt

更多参考:

docopt 官网

三、编程实现

先来考虑一下该程序需要实现哪些功能。

能够解析命令行参数,根据参数进行相应的处理,比如将目标文件转换为 HTML 文件或者转换为 PDF 文件。

解析目标文件,输出 HTML 文件。

根据需要将 HTML 文件转化为 PDF 文件。

对于第一点我们可以使用 docopt 库来构建命令行解析器,而第三点 HTML 转换可以使用 wkhtmltopdf 工具来进行转换。

至于第二点,Markdown 文本解析实际上就是文件翻译工作,即将 Markdown 中规定的特殊字符根据语法规则转换成相应的 HTML 标签,从而实现解析工作。

进入 Code 文件夹创建 shiyanlou_cs708 文件夹作为项目目录,之后该项目的所有文件都位于该文件夹中。

3.1 构建命令行解析器

进入文件夹shiyanlou_cs708, 创建 md2pdf.py 文件,可以使用 gedit 或 vim 进行编辑编写文档,或者使用 web IDE 。

在下方的代码中,在程序段首我们编写了一段程序帮助文档,该文档默认由 doc 变量引用,通过将该变量作为参数传递给 docopt 方法可以快速构建起命令行解析器。然后我们还导入了所有需要用到的模块。

"""md2pdf

translates markdown file into html or pdf, and support picture insertion.

Usage:

md2pdf [options]

Options:

-h --help show help document.

-v --version show version information.

-o --output translate sourcefile into html file.

-p --print translate sourcefile into pdf file and html file respectively.

-P --Print translate sourcefile into pdf file only.

"""

import os,re

import sys,getopt

from enum import Enum

from subprocess import call

from functools import reduce

from docopt import docopt

version = '1.0'

主函数

def main():

# 定义输出的 HTML 文件默认文件名

dest_file = "translation_result.html"

# 定义输出的 PDF 文件的默认文件名

dest_pdf_file = "translation_result.pdf"

# 该选项决定了是否保留作为转化的 HTML 临时文件

only_pdf = False

# 使用帮助文档构建命令行解析器

args = docopt(__doc__, version=__version__)

dest_file = args[''] if args['--output'] else dest_file

dest_pdf_file = args[''] if args['--print'] or args['--Print'] else ""

# 进行解析

run(args[''], dest_file, dest_pdf_file, args['--Print'])

if name=="main":

main()

3.1.1 docopt 使用介绍

这里为了方便大家理解 docopt 的使用,我们先偏离一下主题单独讲解 docopt 模块。首先为了获得最直观的感受,我们不妨在以上代码中添加一句 print(args) 来打印解析器参数解析结果。</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值