python 自动化将markdown文件转成html文件的方法


Posted in Python onSeptember 23, 2016

一、背景

我们项目开发人员写的文档都是markdown文件。对于其它组的同学要进行阅读不是很方便。每次编辑完markdown文件,我都是用软件将md文件转成html文件。刚开始转的时候,还没啥,转得次数多了,就觉得不能继续这样下去了。作为一名开发人员,还是让机器去做这些琐碎的事情吧。故写了两个脚本将md文件转成html文件,并将其放置在web服务器下,方便其他人员阅读。

主要有两个脚本和一个定时任务:

•一个python脚本,主要将md文件转成html文件;

•一个shell脚本,主要用于管理逻辑;

•一个linux定时任务,主要是定时执行shell脚本。

二、用python将markdown转成html

2.1 python依赖库

使用python的markdown库来转换md文件到html依赖两个库:

•pip install markdown

•pip install importlib

2.2 核心代码

核心代码其实只有一句,执行 markdown.markdown(text)就可以获得生成的html的原文。

input_file = codecs.open(in_file, mode="r", encoding="utf-8")
text = input_file.read()
html = markdown.markdown(text)

2.3 html编码和html样式

直接markdown.markdown(text)生成的html文本,非常粗略,只是单纯的html内容。而且在浏览器内查看的时候中文乱码(在chrome中),没有好看的css样式,太丑了。

解决办法也很简单,在保存文件的时候,将<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />和css样式添加上。就这么简单解决了。

2.4 完整python内容

•读取md文件;

•将md文件转成html文本;

•添加css样式和保存html文本。

python代码内容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 使用方法 python markdown_convert.py filename
import sys
import markdown
import codecs
css = '''
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!-- 此处省略掉markdown的css样式,因为太长了 -->
</style>
'''
def main(argv):
name = argv[0]
in_file = '%s.md' % (name)
out_file = '%s.html' % (name)
input_file = codecs.open(in_file, mode="r", encoding="utf-8")
text = input_file.read()
html = markdown.markdown(text)
output_file = codecs.open(out_file, "w",encoding="utf-8",errors="xmlcharrefreplace")
output_file.write(css+html)
if __name__ == "__main__":
main(sys.argv[1:])

三、shell逻辑

3.1 逻辑说明

建立一个shell文件,用于进行逻辑处理,主要操作如下:

•更新svn文件,将最新的md文件更新下来(此处假设md文件是测试文档.md);

•执行python markdown_convert.py $NAME将md文件转成html文件(生成测试文档.html);

•将转好的html迁移到web路径下(移动到html/测试文档.html);

•启动一个web服务(此处用的是python的SimpleHTTPServer的web服务器).

3.2 完整shell逻辑

#!/bin/bash
NAME='测试文档'
## 更新代码
svn update
## 删除html文件
if [ -f "$NAME.html" ];then
rm "$NAME.html"
fi
## 生成html
if [ -f "$NAME.md" ];then
python markdown_convert.py $NAME
fi
## 生成html目录
if [ ! -d "html" ];then
mkdir "html"
fi
## 拷贝html文件
if [ -f "$NAME.html" ];then
mv -f "$NAME.html" "html/"
fi
## 开启web服务器
PID=`ps aux | grep 'python -m SimpleHTTPServer 8080' | grep -v 'grep' | awk '{print $2}'`
if [ "$PID" = "" ];then
cd html
nohup python -m SimpleHTTPServer 8080 &
echo 'start web server'
else
echo 'already start'
fi

四、linux定时任务

在shell命令下输入crontab -e进入linux定时任务编辑界面。在里面设置markdown2web.sh脚本的定时任务:

## 更新文档
*/10 * * * * cd /home/xxx/doc; sh markdown2web.sh > /dev/null 2>&1

以上所述是小编给大家介绍的python 自动化将markdown文件转成html文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
Python3遍历目录树实现方法
May 22 Python
Python中Iterator迭代器的使用杂谈
Jun 20 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
django ajax json的实例代码
May 29 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python 弧度与角度互转实例
Apr 15 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
Python增量循环删除MySQL表数据的方法
Sep 23 #Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 #Python
Python 制作糗事百科爬虫实例
Sep 22 #Python
Python 使用SMTP发送邮件的代码小结
Sep 21 #Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 #Python
Python中将字典转换为列表的方法
Sep 21 #Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 #Python
You might like
用PHP 4.2书写安全的脚本
2006/10/09 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php抽象类用法实例分析
2015/07/07 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
浅谈js闭包理解
2019/03/28 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Python基于Faker假数据构造库
2020/11/30 Python
利用python实现汉诺塔游戏
2021/03/01 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
班级旅游计划书
2014/05/03 职场文书
感恩节活动策划方案
2014/05/16 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
九年级语文教学反思
2016/03/03 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android