自制 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

欢迎拍砖!

时间: 2024-10-31 16:33:41

自制 Python小工具 将markdown文件转换成Html文件的相关文章

工具-Linux系统下java程序如何将PDF文件转换成SWF文件

问题描述 Linux系统下java程序如何将PDF文件转换成SWF文件 我需要将PDF文件转换成SWF格式的文件,目前是用windows系统开发java程序,windows系统中这种转型已经搞定,用的是swftools工具.但是开发完成之后,程序要部署到Linux系统中.由于不熟悉Linux系统所以无从下手,希望高手指点,最好也用swftools工具转型,尽量详细一些,跪谢. 解决方案 前不久刚用过,应该注意的是swftools工具在linux的安装,有时需要依赖才能安装下去,这个工具安装好就基

swf-Linux系统下java程序如何将PDF文件转换成SWF文件

问题描述 Linux系统下java程序如何将PDF文件转换成SWF文件 我需要将PDF文件转换成SWF格式的文件,目前是用windows系统开发java程序,windows系统中这种转型已经搞定,用的是swftools工具,版本是swftools-2013-04-09-1007. 程序开发完成后,需要要部署到Linux系统中.在网上Linux实现的例子比较少,尝试了很多次都没能成功.我现在有Linux系统的swftools-2013-04-09-1007.tar.gz工具,有已经实现功能的朋友,

Windows10系统下如何将chm文件转换成txt文件?

Windows10系统下如何将chm文件转换成txt文件?一些用户在操作电脑的过程中,会碰到chm文件,chm是微软的一种帮助文件格式,很多电子书都会采取这种格式,为了方便查看,很多用户就想将chm文件格式转换成txt格式,那么该如何操作呢?大家请看下文. 方法如下: 1.首先在chm文件所在目录新建一个文本文档,如:在D盘中有一个名为xitongzhijia.chm,那么我们打开新建文本文档,输入以下代码: hh -decompile e:\test\help xitongzhijia.chm

txt转换成bin文件-怎么将txt格式文件转换成bin文件?有重赏

问题描述 怎么将txt格式文件转换成bin文件?有重赏 我是一名工科学生,实验中一个仪器测试的数据是bin格式文件,仪器自带有一个bin文件转换成txt文件的功能,我的实验数据都已经被我转换成了txt文件,有一天件我同学帮我装电脑系统全部格式化硬盘了,我的原始的bin文件全没了,没有备份.现在自己的导师要看我原始bin文件格式的数据,不相信我的txt格式数据,所以我想问问各位大神,有没有什么软件可以将我的txt格式文件转换成原来的bin文件,且仪器能识别的bin文件,小弟愿意给现金作为报答,小弟

java 将excel文件转换成pdf文件

  最近做一个项目,需要把excel文件转换成pdf文件,经过我查资料,无非使用两种方式:1 POI+Itext 2 Jacob来调用excel另存功能. 第一种方式,原理是使用POI来读取excel的内容,将其写到pdf文件中.实现难度有点大,主要是因为excel sheet结构不固定,内容也不固定,可能存在图片等,导致读excel比较复杂,真正实现还是比较复杂的. 第二种方式,原来是使用jacob来调用excel文件的另存为pdf的功能.主要是熟悉jacob的API即可.不需要精巧的编程技巧

java如何将 xls(xls报表)文件转换成cll文件(华表报表)

问题描述 java如何将xls(xls报表)文件转换成cll文件(华表报表)说明:华表报表保存出来的是.cll文件的所以说我现在想把xls报表转换成cll报表的,请问如何处理是好呀!!!谢谢各位了!!!! 解决方案 解决方案二:没有人知道吗?解决方案三:该回复于2011-03-26 12:03:13被版主删除解决方案四:三楼的链接我看了好像对我没有帮助的呀解决方案五:高手呀出来帮帮忙呀!!!

java中如何使用poi3.10将docx文件转换成html文件?

问题描述 java中如何使用poi3.10将docx文件转换成html文件? java 中poi3.10怎么读取docx版本的文档为html 解决方案 没有直接的办法,建议你命令行调用doc2html这个命令http://download.csdn.net/download/JackLee361604415/2747309 或者参考http://www.codeforge.cn/read/250240/Doc2Html.java__html 解决方案二: 用java生成html文件用java生成

java-在JAVA JAXWS中使用WSGEN命令让JAVA文件转换成WS文件时,怎么不失败了,求解惑。

问题描述 在JAVA JAXWS中使用WSGEN命令让JAVA文件转换成WS文件时,怎么不失败了,求解惑. //java文件 package com.rdt.ws.project; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import com.mongodb.*; import com.rdt.ws.domain.TabFile; import javax.j

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

原文地址:webarchive文件转换成htm文件作者:xhbaxf Mac OS X系统带有文件转换功能,可以把webarchive文件变成html文件.方法是:   Step 1: 建立一个文件夹,把你的webarchive文件放入文件夹内. Step 2 在终端(Terminal)下输入:textutil -convert html空格 Step 3 打开装有webarchive文件的文件夹,用鼠标把该文件拉到终端上,然后回车.   textutil便会将该webarchive文件转成ht