自制 Python小工具 将markdown文件转换成Html文件
今天看到了一个Python库,名为markdown。瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具。
我的实验环境
- 操作系统: Windows 7 64位 旗舰版
- Python版本: 2.7.11
- IDE: PyCharm pro 2016.1
- 所需依赖:
- optparser
- markdown
转换核心
转换的过程很简单,只需要使用markdown库即可,具体使用方法如下:
from markdown import markdown
def parse(md_text):
return markdown(md_text)
优化
为了使我们的程序更具特色,也就是类Unix命令行风格。我这里添加了optparser的支持。
核心代码如下:
# OptParser库规范性用法,以实现Unix风格的命令行处理程序
usage = \
"""
'-i', --infile . source markdown file
'-o', --outfile. target html file
'-s', --style. stylesheet for output html file,this is not for mandatory
"""
parser = optparse.OptionParser(usage)
parser.add_option('-i', '--input', dest='infile', type='string', help='input markdown source file')
parser.add_option('-o', '--output', dest='outfile', type='string', help='out put html file')
(options, args) = parser.parse_args()
infile = options.infile
outfile = options.outfile
举例:
python md2html.py -i input.md -o outputfile.html
# 我们在命令行输入的参数就会转移到下面的两个变量中了
(options, args) = parser.parse_args()
infile = options.infile
outfile = options.outfile
美化
为了使得我们的html更加的美观,我这里采取了BootStrap进行了美化。使用的方式是CDN的方式。这样可以使得我们的文件目录更加的清爽,而且可以给用户一个更加简便的使用体验。
使用的模板如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>BootStrap模板</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入 Bootstrap -->
<link href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="http://apps.bdimg.com/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery-2.2.4.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
</body>
<!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) -->
<script src="https://code.jquery.com/jquery.js"></script>
<!-- 包括所有已编译的插件 -->
<script src="js/bootstrap.min.js"></script>
</html>
完整代码
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/8'
# __Desc__ = 将markdown文件转换为带有样式的html文件
from markdown import markdown
import optparse
# 创建一个专门用于处理解析器的工具类
class MDParser:
# 初始化开始
def __init__(self):
print 'Ready to parser markdown source file to html file.'
# 创建一个对输入文件进行解析的方法,输出文件即为符合html语法的不完整文件
def parsre(self, infile):
infile = open(infile, 'rb')
indata = infile.read()
indata = u'%s' % indata
infile.close()
parsedata = markdown(indata)
return parsedata
# 为输出文件添加自定义标题,并且添加缺少的html头部
def appendHead(self, data, title):
head = \
"""
<html><head><meta charset='utf-8'><title>%s</title><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script></head><body><div class='container'><div class="row-fluid">
<div class="span12">
""" % title
newdata = head + data
return newdata
# 配合上面的添加头部文件,下面的这个方法适用于添加html尾部标签,使得文件符合html规范
def appendTail(self, data):
tail = \
"""
</div></div></div><script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.2.0/js/bootstrap.min.js"></script></body></html>
"""
data += tail
return data
# 将完整的html文件输出到指定的位置
def output(self, data, outfile):
outfile = open(outfile, 'wb')
outfile.write(data)
outfile.close()
print "Translated Succeed!"
# OptParser库规范性用法,以实现Unix风格的命令行处理程序
usage = \
"""
'-i', --infile . source markdown file
'-o', --outfile. target html file
'-s', --style. stylesheet for output html file,this is not for mandatory
"""
parser = optparse.OptionParser(usage)
parser.add_option('-i', '--input', dest='infile', type='string', help='input markdown source file')
parser.add_option('-o', '--output', dest='outfile', type='string', help='out put html file')
(options, args) = parser.parse_args()
infile = options.infile
outfile = options.outfile
if __name__ == "__main__":
tool = MDParser()
title = raw_input('Please input the title you want:\n')
parsedata = tool.parsre(infile)
data = tool.appendHead(parsedata, title)
fulldata = tool.appendTail(data)
tool.output(fulldata, outfile)
结果展示
- 程序运行前
infile.md内容:
程序运行方法:
生成结果
缺点
这个工具最大的缺点就是不能将中文进行转换,原因是ascii码超出字符限制。
如果大家有更好的方法,不妨私信我! 大家一起学习!
我的DocUtil
https://github.com/guoruibiao/DocUtil。
欢迎拍砖!
自制 Python小工具 将markdown文件转换成Html文件的更多相关文章
- <p><span style="font-size:14px">近期须要批量将PNM格式的文件转换成GIF文件。我尝试了例如以下的图像转换工具:</span></p>
近期须要批量将PNM格式的文件转换成GIF文件.我尝试了例如以下的图像转换工具: ImageBatch:全然免费,但只支持PNG JPEG BMP GIF四种格式 OfficeConverter:在线 ...
- Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用
Client与Server的网络通信协议传输使用google protobuf,服务器端使用的是Java 一. Protocol Buffersprotobuf全称Google Protocol Bu ...
- linux下的什么工具能将DVI文件转换成PostScript文件?
答: dvips,此工具能将由Latex或Tex生成的DVI文件转换成PostScript文件,官网在此
- [转载]webarchive文件转换成htm文件
原文地址:webarchive文件转换成htm文件作者:xhbaxf Mac OS X系统带有文件转换功能,可以把webarchive文件变成html文件.方法是: Step 1: 建立一个文件夹 ...
- xls/csv文件转换成dbf文件
转至:https://blog.csdn.net/linhai1028/article/details/80211252 编写的一个小脚本,主要是利用python中的pandas,xlrd,dbfpy ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
- chm文件转换成html文件,解决chm文件无法使用浏览器打开的问题
每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code CHM是英语“Compiled Help Manual”的简写,即“已编译的帮助文件”.CHM ...
- PyQt5之使用Qt下的designer工具将.ui文件转换成.py文件后添加什么东西后方可运行
首先证明我是加了那些鬼东西以后可以成功运行的. 然后来叙述一下我的过程. 这是一个.ui文件生成的.py文件.(把主要的内容省去了,但是没有影响结构) # -*- coding: utf-8 -*- ...
- 在Linux下将HTML文件转换成PDF文件
今天要写一个上交的作业,本来是想用Office Word来写的,但是,我的Office貌似不能用了,但是,Linux下的LibreOffice写出的文档,在打印的时候是经常出现乱码的.所以,后来想到可 ...
随机推荐
- 个人建站&mac下安装hexo
title: 个人建站&mac下安装hexo date: 2018-04-18 16:34:02 tags: [mac,blog,个人建站,markdown] --- 这两天使用了markdo ...
- github学习(三)
Git学习(二) 分支学习: 创建新分支dev:git branch dev 切换到dev分支:git checkout dev 可以简写为一句话:git checkout -b dev 可以用命令g ...
- Python super使用
一 基础使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如: #!/usr ...
- TF-IDF In Scikit-Learn
TF-IDF In Scikit-Learn 2017年9月30日补充 其实在算下面TF-IDF的步骤之前,还有一步,就是计算Term Frequency 也就是词频.当然,scikit-lear ...
- bzoj 5288: [Hnoi2018]游戏
Description Solution 乱搞能A的题,毁我青春 记忆化一下扩展过程 只要不是从 \(1\) 枚举到 \(n\) 去扩展都可以 \(AC\) 于是 \(random\_shuffle\ ...
- 【Luogu P2709 小B的询问】莫队
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 算法二叉搜索树之AVL树
最近学习了二叉搜索树中的AVL树,特在此写一篇博客小结. 1.引言 对于二叉搜索树而言,其插入查找删除等性能直接和树的高度有关,因此我们发明了平衡二叉搜索树.在计算机科学中,AVL树是最先发明的自平衡 ...
- tomcat7+jdk的keytool生成证书 配置https
目前只会使用jdk的keytool来生成证书.本文仅介绍这种方法. 1Windows下: 1.1 生成keystore文件及导出证书 打开控制台: 运行: %JAVA_HOME%\bin\keytoo ...
- dnc开源梦之队2018 开源项目精选集
dnc开源梦之队2018 dnc开源项目选择标准 dnc = .NET Core.dotnet core 1.支持dnc 2.x,Github star数量100以上,最近2月活跃更新 2.轻量级.示 ...
- centos 7 x64 搭建 elasticsearch 服务
1.确认服务是否已经安装java 8 环境 使用 java -version 查看 2.在java 官网下载安装包,然后上传到服务器响应的文件中 3.使用 tar -zxvf 文件夹 解压到响应的文件 ...