用python实现markdown转html

1. 前言

现在markdown已经是非常常用的记录工具了,整齐的排版、代码高亮、图片表格样样齐全,同时也支持html标签,是非常好用的一种工具(语法)。

那么今天来分享一下使用python实现markdown文件转为html,而且也能很好显示代码和整齐的排版。

2. 正文

markdown
python-markdown-math
markdown_checklist
pymdown-extensions

本文的主要功能是讲markdown转为html,在上述博客中还带有转换为pdf的功能,但个人觉得转为pdf没什么必要,在此就没添加上了。除此之外,在原有的基础上添加了文章目录的小模块,算是一点小小的改进吧。

这里就直接上代码了>>>

import os
try:
    from markdown import markdown
except ModuleNotFoundError as e:
    os.system("pip install markdown")
    os.system("pip install python-markdown-math")
    os.system("pip install markdown_checklist")
    from markdown import markdown

try:
    from pymdownx import superfences
except ModuleNotFoundError as e:
    os.system("pip install pymdown-extensions")
    from pymdownx import superfences

class mdtox:
    def __init__(self, md_filename, encoding='utf-8'):
        self.md_filename = md_filename
        self.encoding = encoding
        self.__args()

    def __args(self):
        self.html = '''

                {}

                    {}

        '''

        # 扩展配置
        self.extensions = [
            'toc',  # 目录,[toc]
            'extra',  # 缩写词、属性列表、释义列表、围栏式代码块、脚注、在HTML的Markdown、表格
        ]
        third_party_extensions = [
            'mdx_math',  # KaTeX数学公式,$E=mc^2$和$$E=mc^2$$
            'markdown_checklist.extension',  # checklist,- [ ]和- [x]
            'pymdownx.magiclink',  # 自动转超链接,
            'pymdownx.caret',  # 上标下标,
            'pymdownx.superfences',  # 多种块功能允许嵌套,各种图表
            'pymdownx.betterem',  # 改善强调的处理(粗体和斜体)
            'pymdownx.mark',  # 亮色突出文本
            'pymdownx.highlight',  # 高亮显示代码
            'pymdownx.tasklist',  # 任务列表
            'pymdownx.tilde',  # 删除线
        ]
        self.extensions.extend(third_party_extensions)
        self.extension_configs = {
            'mdx_math': {
                'enable_dollar_delimiter': True  # 允许单个$
            },
            'pymdownx.superfences': {
                "custom_fences": [
                    {
                        'name': 'mermaid',  # 开启流程图等图
                        'class': 'mermaid',
                        'format': superfences.fence_div_format
                    }
                ]
            },
            'pymdownx.highlight': {
                'linenums': True,  # 显示行号
                'linenums_style': 'pymdownx-inline'  # 代码和行号分开
            },
            'pymdownx.tasklist': {
                'clickable_checkbox': True,  # 任务列表可点击
            }
        }

    def to_html(self, html_name):
        try:
            with open(self.md_filename, "r", encoding=self.encoding) as file_md:
                md_text = file_md.read()
        except Exception as e:
            print("", e)
            return False

        title = '.'.join(os.path.basename(self.md_filename).split('.')[:-1])
        html_text = markdown(md_text, output_format='html', extensions=self.extensions, extension_configs=self.extension_configs)  # MarkDown转HTML
        self.html = self.html.format(title, html_text)

        try:
            with open(html_name, 'w', encoding=self.encoding) as file_html:
                file_html.write(self.html)
        except Exception as e:
            print("", e)
            return False

        return True

这里我封装了下载依赖库,所以只要运行python代码即可。其中的js文件、css文件都在我的博客文件中,所以只要有网都可以轻松访问生成的html文件,若想离线使用,就把需要的文件下载到本地,然后引入即可。

本测试与上述代码在同个文件中
if __name__ == '__main__':
    md_name = "E:/java.md"
    html_name = "E:/java.html"

    if(mdtox(md_name).to_html(html_name)):
        print('转换完成')

Original: https://www.cnblogs.com/bpf-1024/p/14118167.html
Author: 步平凡
Title: 用python实现markdown转html

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613095/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis之SDS

    SDS:的优点1.获取长度复杂度为O(1)2.避免strcat内存重分配(可能涉及系统调用), 通过[预分配策略]和[惰性空间释放]实现 3.以二进制存储,主要是安全设计,若存储的…

    Linux 2023年5月28日
    073
  • CentOS——Redis远程连接可视化工具Rdis Desktop Manage

    前排提示 Centos没有安装Redis的可参考 https://www.cnblogs.com/tianhengblogs/p/15265028.html 一。 修改redis….

    Linux 2023年5月28日
    0153
  • 截止2021年底,我国18个税种中已有12个税种完成立法

    截止2021年底,我国18个税种中已有12个税种完成立法: 1.中华人民共和国个人所得税法 (自1980年9月10日起施行)2.中华人民共和国企业所得税法 (自2008年1月1日起…

    Linux 2023年6月14日
    0392
  • linux配置密钥登录

    一、前言: ssh远程登录密码认证的方式有三种,password、Keyboard Interactive、Public Key前面两种方式就是密码认证,含义都是一样大同小异。第三…

    Linux 2023年6月8日
    073
  • Java基础系列–05_面向对象

    1、概述:(1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。(2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出…

    Linux 2023年6月7日
    0101
  • 一篇文章扒掉“桥梁Handler”的底裤

    Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说,大家不知道是否认同,如果认同,还希望能给一个关注哈。 什么是Ha…

    Linux 2023年6月13日
    086
  • 【C++基础】函数的分文件编写

    cpp函数的分文件编写 作用:让代码结构更加清晰 如下步骤: 创建后缀名为.h的头文件 创建后缀名为.cpp的源文件 在头文件中写函数的声明 在源文件中写函数的定义,同时引入自定义…

    Linux 2023年6月13日
    090
  • zabbix用户,角色,权限,模板管理

    zabbix用户,角色,权限,模板管理 zabbix用户,角色,权限,模板管理 用户组用户角色右上角是创建角色用户lnh@1234使用刚才创建的用户登录模板组模板模板的监控项可以自…

    Linux 2023年6月6日
    091
  • Java — 反射

    程序在运行中也可以获取类的变量和方法信息,并通过获取到的信息来创建对象。程序不必再编译期就完成确定,在运行期仍然可以扩展。 示例:学生类 public class Student …

    Linux 2023年6月8日
    0117
  • GCC 内联汇编基础

    GCC 内联汇编 在 MIT6.828的实验中,有几处用到了很底层的函数,都以内联汇编的形式存在,例如 static inline uint32_t read_esp(void) …

    Linux 2023年6月8日
    076
  • 聊聊redis单线程为什么能做到高性能和io多路复用到底是个什么鬼

    1:io多路复用epoll io多路复用简单来说就是一个线程处理多个网络请求。 我们知道epoll in 的事件触发是可读了,这个比较好理解,比如一个连接过来,或者一个数据发送过来…

    Linux 2023年5月28日
    074
  • vue3中iview框架初始值赋值问题

    问题:今天有个小伙伴说我们前端有个页面异常奇怪,没有显示数据。 开发小伙伴进行查询之后(非专业前端),明明进行了绑定,页面死活无法渲染,归属于灵异事件了,对于这种灵异事件,我总会想…

    Linux 2023年6月7日
    079
  • redis的三种集群方式

    redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令…

    Linux 2023年5月28日
    077
  • Linux内核中内存管理相关的数据结构

    本文简要说明几个内核和内存管理有关的结构体。其中 struct page 和 struct zone有较大幅度的删减,主要删减了和NUMA模型SPARSE模型以及内存热插拔相关的域…

    Linux 2023年6月7日
    099
  • redis配置systemctl

    [Unit]Description=redisAfter=network.target [Service]Type=forkingPIDFile=/var/run/redis_63…

    Linux 2023年5月28日
    096
  • 灵敏度分析简介

    参考文章1 😄参考文章2 😸参考文章3 😃 1. 灵敏度分析: 某一个假定的常量,在现实中不可能完全保持不变,可能发生一定范围的波动。灵敏度分析就是检验这部分波动对结果的影响。 灵…

    Linux 2023年6月14日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球