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.py
和empty_output.py
的代码。最核心的转换算法python-markdown可以在GitHub上搜到。
整个程序的源码可以在这里得到。
run.py
import os
import markdown
import codecs
import sys
reload(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_name
full_ouput_file_name = ouput_dir + '/' + file_name + ouput_file_type
with 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 os
import markdown
import codecs
import sys
reload(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_name
os.remove(full_file_name)
print '\nAll Done!'
Markdown文件导出为HTML的小程序的更多相关文章
-
微信小程序开发——活动规则类文案文件读取及自动转换为小程序排版代码
前言: 最近做的小程序活动规则内容比较多,且一直处于修改中.由于小程序并不支持类似Html5中的预排版,所以,活动规则内容修改较大的时候,仍需要对新的内容用小程序的<text>组件做下排版 ...
-
采用pandas读取文件,进行自动化统计小程序
自己完成的第二个自动化统计小程序,完成之后感觉:命名不够规范,造成可读性比较没那么好,幸好给自己很多地方都加了注释#coding:utf-8import os,sysimport reimport x ...
-
自动生成.py文件头部的C语言小程序
每次都 vi xxx.py 然后再打 #!/usr/bin/env python 等等的程序头信息感觉有点麻烦,于是便想着写一个小程序自动生成这些头信息了,顺便在 ~/.bashrc 里写入 alia ...
-
关于markdown文件插入图片遇到的小问题和解决办法
今天用md文件时候发现需要插入图片,以前没做过,所以写下来分享下. 1.先在自己的github上建一个仓库,里面新建个img文件夹存放图片,怎么建仓库可以上网找资料,这里就不详细说明了.建好的仓库如下 ...
-
根据文件夹更改样本文件名小程序.py
#按照文件名设置标签并将其插入文件名中import osimport shutil#获取目标文件夹的路径a= r'C:\Users\yy\Desktop\tianchi大赛\guangdong_rou ...
-
小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件
视图层:Pages主要有 wxml页面文件和模板文件.wxs脚本文件.wxss样式文件:component是抽取出来的业务单元,同样拥有wxml页面文件和模板文件.wxs脚本文件.wxss样式文件 ...
-
微信小程序开发---各代码文件简介
根据上一文,已建立QuickStart 项目,该项目系本人毕设部分内容,所以记录以便以后查阅 开发小程序就必须了解小程序项目目录结构和文件作用,接下来就根据我现在自学得到的知识把这些记录下来. 一.目 ...
-
小程序云开发--云函数上传文件或图片 base64
云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限 所以普通用户想要使用wx.cloud.uploadFile显然是不现实的 但是我们同时也知道,云函数是后台服务端, ...
-
C#windows桌面应用小程序制作——大文件数据分段解析存储
现在的任务就是做一个大文件解析的桌面应用小程序,具体需求就是:将一个很大的文件里的数据按一定标志拆分然后分别保存到某个文件夹下面. 解析的文件内容为以下内容: windows 应用小程序界面 具体代码 ...
随机推荐
-
【Python图像】给你的头像+1
早些年,微信朋友圈有段时间非常流行这个头像+1的套路,简直逼死强迫症. 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 涉及知识: Pyt ...
-
python 获取当前目录下文件(转)
今天继续整理原来写的 python 代码,下面是获取文件信息的 python 处理代码. 获取指定目录下文件的文件名以及文件的数量,然后列出其中还存在的目录名称: #!/usr/bin/env pyt ...
-
ADO.NET中的DataReader详解
使用特性 原理图 PS:Read()使指针下移,同时销毁上一条.所以SqlDataReader是只进的. GetValue()是找当前行中的列 SqlDataReader()特性. 1)只进的 上面 ...
-
web服务器分析与设计(四)
上篇已经开始了系统内部的分析,并且得到一些分析对象.在整个动作场景中,我们得到了一些粗略的对象.有必要对对象进行分析,合并,再抽象. 实质是职责的合理分配,使得系统合乎功能性,同时得到最大的可扩展,可 ...
-
xcopy拷贝判断是否成功 robocopy排除子目录
xcopy \\172.16.22.65\server\*.* C:\Inetpub\wwwroot\Server /h /r /s /yif %errorlevel% neq 0 echo copy ...
-
[CQOI 2010]扑克牌
Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的 牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1 ...
-
SQL Server中LIKE %search_string% 走索引查找(Index Seek)浅析
在SQL Server的SQL优化过程中,如果遇到WHERE条件中包含LIKE '%search_string%'是一件非常头痛的事情.这种情况下,一般要修改业务逻辑或改写SQL才能解决SQL执行 ...
-
COM,SOM, QT, GObject, ObjectiveC
COM,SOM, QT, GObject, ObjectiveC https://en.wikipedia.org/wiki/IBM_System_Object_Model#Comparison_of ...
-
理解ThreadPoolExecutor源代码(二)execute函数的巧妙设计和阅读心得
ThreadPoolExecutor.execute()源代码提供了大量凝视来解释该方法的设计考虑.以下的源代码来自jdk1.6.0_37 public void execute(Runnable c ...
-
Entity Framework 项目使用心得
在博客园很久了,一直只看不说,这是发布本人的第一个博客. 总结一下在项目中,EntityFramework使用的一下经验拿来和大家分享,希望对大家有用~ 1. 在Entity Fram ...