今天看到了一个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文件的更多相关文章

  1. <p><span style="font-size:14px">近期须要批量将PNM&#26684;式的文件转换成GIF文件。我尝试了例如以下的图像转换工具:</span></p>

    近期须要批量将PNM格式的文件转换成GIF文件.我尝试了例如以下的图像转换工具: ImageBatch:全然免费,但只支持PNG JPEG BMP GIF四种格式 OfficeConverter:在线 ...

  2. Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用

    Client与Server的网络通信协议传输使用google protobuf,服务器端使用的是Java 一. Protocol Buffersprotobuf全称Google Protocol Bu ...

  3. linux下的什么工具能将DVI文件转换成PostScript文件?

    答: dvips,此工具能将由Latex或Tex生成的DVI文件转换成PostScript文件,官网在此

  4. [转载]webarchive文件转换成htm文件

    原文地址:webarchive文件转换成htm文件作者:xhbaxf Mac OS X系统带有文件转换功能,可以把webarchive文件变成html文件.方法是:   Step 1: 建立一个文件夹 ...

  5. xls/csv文件转换成dbf文件

    转至:https://blog.csdn.net/linhai1028/article/details/80211252 编写的一个小脚本,主要是利用python中的pandas,xlrd,dbfpy ...

  6. 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件

    PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...

  7. chm文件转换成html文件,解决chm文件无法使用浏览器打开的问题

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code CHM是英语“Compiled Help Manual”的简写,即“已编译的帮助文件”.CHM ...

  8. PyQt5之使用Qt下的designer工具将.ui文件转换成.py文件后添加什么东西后方可运行

    首先证明我是加了那些鬼东西以后可以成功运行的. 然后来叙述一下我的过程. 这是一个.ui文件生成的.py文件.(把主要的内容省去了,但是没有影响结构) # -*- coding: utf-8 -*- ...

  9. 在Linux下将HTML文件转换成PDF文件

    今天要写一个上交的作业,本来是想用Office Word来写的,但是,我的Office貌似不能用了,但是,Linux下的LibreOffice写出的文档,在打印的时候是经常出现乱码的.所以,后来想到可 ...

随机推荐

  1. [ZJOI2015]幻想乡战略游戏

    Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...

  2. 【BZOJ1016】【JSOI2008】最小生成树计数

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  3. poj 1279 半平面交核面积

    Art Gallery Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6668   Accepted: 2725 Descr ...

  4. bzoj3126[Usaco2013 Open]Photo 单调队列优化dp

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 188[Submit] ...

  5. python变量、条件循环语句

    1. 变量名 - 字母  - 数字  - 下划线  #数字不能开头:不能是关键字:最好不好和python内置的函数等重复 2. 条件语句 缩进用4个空格(Tab键)注意缩进如果是空格键和Tab键混用, ...

  6. Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

    在线教育平台项目演示地址 项目部署教程 1.1.工作原理介绍 django 一个基于python的开源web框架 uwsgi 一是一个web服务器,也可以当做中间件 nginx 常用高性能代理服务器 ...

  7. spring boot新建项目问题总结

    1.启动报:Unregistering JMX-exposed beans on shutdown 原因:以来的Tomcat没有启动 解决办法:在pom.xml加入依赖 <dependency& ...

  8. Unix系统的文件打开机构

    当打开一个文件时,建立用户与该文件的联系.其实质是将该文件在辅存中的有关目录信息.辅存i节点及相应的文件地址索引表拷贝到主存中.文件系统中管理这一方面的机构成为打开文件管理机构,简称打开文件机构. 打 ...

  9. (转)FIDDER教程

    Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...

  10. Java8-理解Colloctor

    上一节学习了Java8中比较常用的内置collector的用法.接下来就来理解下collector的组成. Collector定义 Collector接口包含了一系列方法,为实现具体的归约操作(即收集 ...