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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
python fabric实现远程部署
Jan 05 Python
Python 多线程的实例详解
Sep 07 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
Python脚本完成post接口测试的实例
Dec 17 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 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 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
jquery实现excel导出的方法
2013/04/04 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python之文字转图片方法
2018/05/10 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Tensorflow累加的实现案例
2020/02/05 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
2014年财政局工作总结
2014/12/09 职场文书
文艺晚会开场白
2015/05/29 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP