Markdown文件导出为HTML的小程序

Markdown文件导出为HTML的小程序

为什么做

最近把一些学习经验记下来,总结成MarkDown文件,不知不觉已经有12篇了。
Sublime Text 的 MarkDown Preview 插件能够将MarkDown语法转换为HTML,并提供三种预览方式:浏览器预览、保存为HTML文件、输出到Sublime的新标签页。

但有一个缺点是,我有12个MarkDown文件,想分别转换为HTML文件,需要重复执行12次打开文件->Crtl+P调出命令面板->输入MarkDown Preview->选择Save To HTML->选择保存路径->确定

我突发奇想,Sublime是基于Python的,何不利用MarkDown Preview的API,写一个Python脚本,进行批量转换。这样,无论是12篇,还是120篇,都可以通过一个命令轻松完成转换,避免了重复劳动。

怎么做的

我通过Sublime的Preferences->Browse Packages找到了一个名为python-markdwon的文件夹,似乎是用来支持MarkDown转换的。
阅读了其中的__init__.py文件,了解到这个包可以将MarkDown转换为HTML。它提供了两个API:

  • html = markdown.markdown(your_text_string)

  • html = markdown.markdownFromFile(file_name)

如此简单易用,就是它了!

经过测试,markdown.markdownFromFile()这个函数对中文支持较差:如果文件内容含有汉字,转换后的html字符串出现奇怪的乱码。似乎可以提供附加参数指定编码格式,但我决定不去偷这个懒(好吧,其实是懒得去研究源代码)。

设计思路很简单:

  • 在指定文件夹内读取所有.md文件:

    for x in os.listdir('./input'): if os.path.splitext(x)[1]=='.md':...
  • 对每个.md文件,其内容是一个字符串

    with open('/path/file_name.md', 'r') as f:md = f.read()
  • 利用markdown.markdown()转换为HTML格式对字符串

    html = markdown.markdown(md)
  • 将HTML格式字符串写入到.html文件内

    with open('/path/file_name.html', 'w') as f:f.write(html)

当然,其中还要考虑路径、字符编码等问题。这里并没有列出,详细代码可参看下文。

怎么用

我建立了这样的文件结构:

 .|---markdown||---input|   |---1.md|   |---2.md||---output|   |---1.html|   |---2.html||---run.py||---empty_output.py
  • markdown文件夹是从Sublime插件目录的python-markdown直接复制过来的。

  • input文件夹内放的是转换前的MarkDown文件,目前只支持英文文件名。

  • output文件夹里是自动生产的转换后的HTML文件,与对应的MarkDown文件同名。

  • run.py是执行的脚本文件,用来将MarkDown转换为HTML。

  • empty_output.py用来清空output文件夹的内容,但不删除该文件夹。

运行步骤很简单:

  • 将MarkDown文件通通放入input文件夹下

  • 命令行执行python run.py

  • 去output文件夹下找转换后的文件

为什么只支持英文文件名呢?这个问题我也想解决,搜了一些博客,在MacOS下测试中文文件名都一切OK。但是换到了Windows下就翻脸不认人。还是我Python道行太浅,索性就只支持英文文件名吧。

做出了什么

这里贴一下run.pyempty_output.py的代码。最核心的转换算法python-markdown可以在GitHub上搜到。

整个程序的源码可以在这里得到。

run.py

    import osimport markdownimport codecsimport sysreload(sys)sys.setdefaultencoding('utf-8')input_dir = './input'ouput_dir = './output'input_file_type = '.md'ouput_file_type = '.html'print '\n'for full_input_file_name in os.listdir(input_dir):if os.path.splitext(full_input_file_name)[1]==input_file_type:print 'Converting ' + full_input_file_name + ' ...'file_name = os.path.splitext(full_input_file_name)[0]full_input_file_name = input_dir + '/' + full_input_file_namefull_ouput_file_name = ouput_dir + '/' + file_name + ouput_file_typewith codecs.open(full_input_file_name, 'r') as ifile:in_file_content = ifile.read()ou_file_content = markdown.markdown(in_file_content)with codecs.open(full_ouput_file_name, 'w', 'gbk') as ofile:ofile.write(ou_file_content)print '\nAll Done!'

empty_output.py

    import osimport markdownimport codecsimport sysreload(sys)sys.setdefaultencoding('utf-8')ouput_dir = './output'print '\n'for file_name in os.listdir(ouput_dir):print 'Deleting ' + file_name + ' ...'full_file_name = ouput_dir + '/' + file_nameos.remove(full_file_name)print '\nAll Done!'

转载于:https://www.cnblogs.com/gymmer/p/5991183.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python制作自动回复脚本_python itchat实现微信自动回复的示例代码

今天在实验楼发现一个特别好玩的,Python 微信库itchat,可以实现自动回复等多种功能,好玩到根本停不下来啊,尤其是调戏调戏不懂计算机的,特别有成就感,哈哈!!代码如下:#codingutf8imp…

pta龟兔赛跑Java_PTA-龟兔赛跑

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,…

视频压缩算法的相关知识

视频压缩算法的相关知识MPEG-1MPEG 视频压缩编码后包括三种元素:I帧(I-frames)、P帧(P-frames)和B帧(B-frames)。在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩…

安装MariaDB数据库(未完成)

1转载于:https://www.cnblogs.com/centos7/p/5994533.html

python接口开发django_用 Django 开发接口

环境搭建1、pip install django2.2.0一、django-admin startproject UITESTpython manage.py startapp paltform创建Django项目1. 创建方式:#方式1:终端输入django-admin startproject UITEST#方式2:pycharm中新建django项目在settings.py文件中添加应用…

戒掉dota

立言为证。 每次不想学习想到dota就强迫自己去培养的兴趣。 比如看一本喜欢的书;比如去跑个步;比如研究某个兴趣点写个报告;比如写份随笔。 转载于:https://www.cnblogs.com/hongxia/p/3830348.html

java切入式编程显示屏_C语言嵌入式系统编程修炼之四:屏幕操作

C语言嵌入式系统编程修炼之四:屏幕操作作者:宋宝华 更新日期:2005-07-22汉字处理现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显…

DIV的边距属性在Chrome和IE中的区别

突然间,在Chrome下看起来很整齐的布局,在IE下变成一团糟。为了找出原因,我改动了div的background-color属性。最后,发现同一个DIV的宽度在IE和Chrome下却不一样。这大晚上的,真是怪吓人滴! 之后&#xff0c…

算法之矩阵计算斐波那契数列

算法之矩阵计算斐波那契数列 本节内容 斐波那契介绍普通方式求解斐波那契矩阵概念矩阵求幂矩阵求解斐波那契1.斐波那契介绍 斐波那契数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。即f(n)f(n-1)f(n-2),f(0)0,f(1)f(2)1,推导下…

python中去除字符串中首尾空格的函数_Python中去除字符串首尾特定字符的函数:strip()...

Python中strip()函数的作用是去除一个字符串前导和尾部的特定字符,并返回结果字符串。Python中strip()函数默认是删除字符串前导和尾部空格,通过设定参数,也可以去除字符串前导和尾部的其它特定字符。strip()函数的语法格式str.strip( [ char…

SeekBar和RatingBar

1. SeekBar的主要属性 2. OnSeekBarChangeListener 3. RatingBar的主要属性 4. OnRatingBarChangeListener 1. SeekBar的主要属性 2. OnSeekBarChangeListener 1 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools&qu…

用“Web的思想”做PC客户端

一直在想&#xff0c;用HTML搭建前端页面这么方便&#xff0c;而且效果这么炫&#xff0c;为什么在PC端的软件要如此麻烦呢&#xff1f;就连C#也是&#xff0c;更何况C了。 尽管C有DirectUI这样优秀的图形库&#xff0c;但是开发起来仍然非常吃力。C#的WPF虽然工具链完善&#…

Java点击按钮div缩放_[Java教程]怎样给div增加resize事件

[Java教程]怎样给div增加resize事件0 2016-10-31 11:00:04当浏览器窗口被调整到一个新的高度或宽度时&#xff0c;就会触发resize事件,这个事件在window上面触发,那么如何给div元素增加resize事件&#xff0c;监听div的高度或宽度的改变呢&#xff1f;某位大神用jquery实现的方…

python判断题题库大数据技术_智慧树_大数据分析的python基础_搜题公众号

智慧树_大数据分析的python基础_搜题公众号更多相关问题社会公众可以查阅烟草专卖行政主管部门的监督检查记录。()公民、法人或者其他组织不得利用自动售货机销售烟草制品。()烟草广告中不得有下列情形()。A、社会公益广告B、迁址、换房、更名等启事广告C、表示吸烟有利人体健公…

Java并发中常用同步工具类

为什么80%的码农都做不了架构师&#xff1f;>>> 同步工具类可以是任何一个对象&#xff0c;只要它根据其自身的状态来协调线程控制流。阻塞队列&#xff08;BlockingQueue&#xff09;可以作为同步工具类&#xff0c;其他类型的同步工具类还包括信号量&#xff08;…

Linux平台Oracle多个实例启动说明

环境说明:oracle实例1的SID为orcl(为默认启动的实例),第二个实例的SID为orcl2 启动步骤&#xff1a; 1&#xff09;启动数据库实例完成后&#xff0c;启动数据库监听服务 #lsnrctl start 2&#xff09;切换到需要启动的数据库实例下&#xff0c;如下表示启动的是orcl数据库…

RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播

RTMP协议发送H.264编码及AAC编码的音视频&#xff0c;实现摄像头直播 摘要: RTMP协议发送H.264编码及AAC编码的音视频&#xff0c;实现摄像头直播  RTMP&#xff08;Real Time Messaging Protocol&#xff09;是专门用来传输音视频数据的流媒体协议&#xff0c;最初由Macrome…

java消息顺序执行_Apache Flink:如何并行执行但保持消息顺序?

请在下面找到使用侧输出和插槽组进行本地扩展的示例 .package org.example/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regardi…

python的字符串定界符可以使用_使用Template格式化Python字符串的方法

对Python字符串&#xff0c;除了比较老旧的%&#xff0c;以及用来替换掉%的format&#xff0c;及在python 3.6中加入的f这三种格式化方法以外&#xff0c;还有可以使用Template对象来进行格式化。from string import Template&#xff0c;可以导入Template类。实例化Template类…

【ES实战】ES6.7的tar包离线安装帮助手册

Elasticsearch6.7部署帮助手册 校验时间&#xff1a;2023年12月19日 文章目录 Elasticsearch6.7部署帮助手册安装前准备安装包安装要求锁定内存,修改最大文件描述符,最大线程数内核参数 部署规划端口规划用户规划目录规划 安装步骤每个服务器配置JDK配置文件master角色node角色…