分享

自制 Python小工具 将markdown文件转换成Html文件

 戴维图书馆 2019-10-22

今天看到了一个Python库,名为markdown。瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具。
镇楼图

我的实验环境

  • 操作系统: Windows 7 64位 旗舰版

  • Python版本: 2.7.11

  • IDE: PyCharm pro 2016.1

  • 所需依赖:

    • optparser

    • markdown

转换核心

转换的过程很简单,只需要使用markdown库即可,具体使用方法如下:

  1. from markdown import markdown
  2. def parse(md_text):
  3. return markdown(md_text)

优化

为了使我们的程序更具特色,也就是类Unix命令行风格。我这里添加了optparser的支持。
核心代码如下:

  1. # OptParser库规范性用法,以实现Unix风格的命令行处理程序
  2. usage = \
  3. """
  4. '-i', --infile . source markdown file
  5. '-o', --outfile. target html file
  6. '-s', --style. stylesheet for output html file,this is not for mandatory
  7. """
  8. parser = optparse.OptionParser(usage)
  9. parser.add_option('-i', '--input', dest='infile', type='string', help='input markdown source file')
  10. parser.add_option('-o', '--output', dest='outfile', type='string', help='out put html file')
  11. (options, args) = parser.parse_args()
  12. infile = options.infile
  13. outfile = options.outfile

举例:

  1. python md2html.py -i input.md -o outputfile.html
  2. # 我们在命令行输入的参数就会转移到下面的两个变量中了
  3. (options, args) = parser.parse_args()
  4. infile = options.infile
  5. outfile = options.outfile

美化

为了使得我们的html更加的美观,我这里采取了BootStrap进行了美化。使用的方式是CDN的方式。这样可以使得我们的文件目录更加的清爽,而且可以给用户一个更加简便的使用体验。

使用的模板如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>BootStrap模板</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <!-- 引入 Bootstrap -->
  8. <link href="http://apps./libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet">
  9. <link href="http://apps./libs/bootstrap/css/bootstrap.min.css" rel="stylesheet">
  10. <script src="js/jquery-2.2.4.min.js"></script>
  11. <script src="http://apps./libs/bootstrap/js/bootstrap.min.js"></script>
  12. </head>
  13. <body>
  14. </body>
  15. <!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) -->
  16. <script src="https://code./jquery.js"></script>
  17. <!-- 包括所有已编译的插件 -->
  18. <script src="js/bootstrap.min.js"></script>
  19. </html>

完整代码

  1. # coding:utf-8
  2. # __author__ = 'Mark sinoberg'
  3. # __date__ = '2016/7/8'
  4. # __Desc__ = 将markdown文件转换为带有样式的html文件
  5. from markdown import markdown
  6. import optparse
  7. # 创建一个专门用于处理解析器的工具类
  8. class MDParser:
  9. # 初始化开始
  10. def __init__(self):
  11. print 'Ready to parser markdown source file to html file.'
  12. # 创建一个对输入文件进行解析的方法,输出文件即为符合html语法的不完整文件
  13. def parsre(self, infile):
  14. infile = open(infile, 'rb')
  15. indata = infile.read()
  16. indata = u'%s' % indata
  17. infile.close()
  18. parsedata = markdown(indata)
  19. return parsedata
  20. # 为输出文件添加自定义标题,并且添加缺少的html头部
  21. def appendHead(self, data, title):
  22. head = \
  23. """
  24. <html><head><meta charset='utf-8'><title>%s</title><meta name="viewport" content="width=device-width, initial-scale=1">
  25. <link rel="stylesheet" href="http://apps./libs/bootstrap/3.3.0/css/bootstrap.min.css">
  26. <script src="http://apps./libs/jquery/2.1.1/jquery.min.js"></script>
  27. <script src="http://apps./libs/bootstrap/3.3.0/js/bootstrap.min.js"></script></head><body><div class='container'><div class="row-fluid">
  28. <div class="span12">
  29. """ % title
  30. newdata = head + data
  31. return newdata
  32. # 配合上面的添加头部文件,下面的这个方法适用于添加html尾部标签,使得文件符合html规范
  33. def appendTail(self, data):
  34. tail = \
  35. """
  36. </div></div></div><script src="http://apps./libs/jquery/2.1.1/jquery.min.js"></script>
  37. <script src="http://apps./libs/bootstrap/3.2.0/js/bootstrap.min.js"></script></body></html>
  38. """
  39. data += tail
  40. return data
  41. # 将完整的html文件输出到指定的位置
  42. def output(self, data, outfile):
  43. outfile = open(outfile, 'wb')
  44. outfile.write(data)
  45. outfile.close()
  46. print "Translated Succeed!"
  47. # OptParser库规范性用法,以实现Unix风格的命令行处理程序
  48. usage = \
  49. """
  50. '-i', --infile . source markdown file
  51. '-o', --outfile. target html file
  52. '-s', --style. stylesheet for output html file,this is not for mandatory
  53. """
  54. parser = optparse.OptionParser(usage)
  55. parser.add_option('-i', '--input', dest='infile', type='string', help='input markdown source file')
  56. parser.add_option('-o', '--output', dest='outfile', type='string', help='out put html file')
  57. (options, args) = parser.parse_args()
  58. infile = options.infile
  59. outfile = options.outfile
  60. if __name__ == "__main__":
  61. tool = MDParser()
  62. title = raw_input('Please input the title you want:\n')
  63. parsedata = tool.parsre(infile)
  64. data = tool.appendHead(parsedata, title)
  65. fulldata = tool.appendTail(data)
  66. tool.output(fulldata, outfile)

结果展示

  • 程序运行前

起始文件目录

  • infile.md内容:
    源文件

  • 程序运行方法:
    如何运行

  • 生成结果
    html代码
    浏览器验证

缺点

这个工具最大的缺点就是不能将中文进行转换,原因是ascii码超出字符限制。
如果大家有更好的方法,不妨私信我! 大家一起学习!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约