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.pswp.cn/news/260282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260282.shtml
英文地址,請注明出處:http://en.pswp.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角色…