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 相关文章推荐
Python中使用copy模块实现列表(list)拷贝
Apr 14 Python
使用python生成目录树
Mar 29 Python
python sys.argv[]用法实例详解
May 25 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Python魔法方法详解
Feb 13 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
Python datetime包函数简单介绍
Aug 28 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
Python之matplotlib绘制饼图
Apr 13 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
PHP原理之异常机制深入分析
2010/08/08 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
深入PHP数据加密详解
2013/06/18 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
Python 字符串定义
2009/09/25 Python
python里对list中的整数求平均并排序
2014/09/12 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
八项规定整改措施
2014/02/12 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Django如何与Ajax交互
2021/04/29 Python