脚本写的好,下班下得早!程序员一大特长就是用程序实现自动化脚本,让枯燥、重复的工作自动执行~

能否写出高效实用的脚本代码,直接影响着一个程序员的幸福生活 [下班时间]。今天我们就手把手教你用 Python 写 3 个实用脚本,分别是:

  • 将 Markdown 文本转换为 HTML 文本的脚本文件

  • 批量检测文本文件的编码信息,并批量转换到任意编码,再无乱码之忧

  • 利用 md5 和 sha1 进行文件检验

教程出自实验楼课程「使用 Python3 编写系列实用脚本」,目前正在限免中,课程如下,欢迎打开电脑同步操作实验:

https://www.shiyanlou.com/courses/580

教程如下:

Markdown 文本转HTML

一、实验简介

本节实验我们学习使用 Python3 编写一个将 Markdown 文本转换为 HTML 文本的脚本文件,这个脚本可以自定义 HTML 的 CSS 样式(默认没有样式),可以自定义输出目录(默认为 Markdown 文件所在目录),并且提供使用说明。

知识点

  • Python3 基础语法

  • os 模块处理文件名和路径

  • getopt 模块解析命令行参数

  • markdown 模块转换文本格式

  • BeautifulSoup4 模块格式化 HTML

效果展示

实验所需模块及其版本

  • python 3.5.2

  • markdown 3.3.1

  • beautifulsoup4 4.8.1

  • html5lib 1.0.1

适合人群

面向于有 Python3 语法基础、有 HTML 基础的人群,适合 Python3 的进阶学习。

代码获取

可以在实验环境中使用如下命令下载完整代码:

$ wget http://labfile.oss.aliyuncs.com/courses/580/mth.py

二、实验步骤

接下来通过实践操作,带领大家使用 Python3 实现 Markdown to Html 的脚本。

环境准备

实验环境中已经安装了 Python3.5 和包管理工具 pip3 ,此外需要安装的库有 markdown 、beautifulsoup4 和 html5lib ,在终端命令行执行以下命令安装它们:

$ sudo pip3 install markdown
$ sudo pip3 install beautifulsoup4
$ sudo pip3 install html5lib

编写命令行参数解析类

在 /home/shiyanlou/Code 目录下新建文件 mth.py ,首先引入所需模块和方法:

import os
import sys
import getopt
import markdown
from bs4 import BeautifulSoup

创建 ArgsParse 类用于解析命令行选项和参数:

class ArgsParse:'''命令行参数解析类'''# 参数说明文档options_explain = '''Options:-h, --help  参数说明-f          被处理的 Markdown 文件-S          美化页面的 CSS 文件-d          转换成 HTML 文件后,新文件所在目录路径-F          转换成 HTML 文件后,新文件的文件名'''

其中 options_explain 是在命令行执行 python3 mth.py -h 命令时打印到屏幕上的参数说明。

最后定义初始化方法和处理选项的方法,代码及其说明如下:

def __init__(self):# 选项有“短选项”和“长选项”两种# 短选项格式:一个减号一个字母;长选项格式:俩减号多个字母# getopt.getopt 方法有仨参数:要处理的对象列表、短选项组、长选项组# 短选项组为字符串,若选项有参数,后面加冒号# 长选项组为列表,若选项有参数,后面加等号# 该方法返回值为二元元组,元组中每个元素都是列表# 一个是选项解析结果,另一个是其余参数options, _ = getopt.getopt(sys.argv[1:], 'hf:d:S:F:', ['help'])# options 是列表,列表中每个元素都是二元元组,将其转换为字典self.options_dict = (dict(options))# 如果选项中有 -h 或 --help ,打印参数说明文档并结束程序if '-h' in self.options_dict or '--help' in self.options_dict:print(self.options_explain)sys.exit()# 调用参数处理函数,将各个参数赋值给相应的属性self.args_parse()def args_parse(self):'''参数处理函数,从解析后的选项字典中读取各个文件名'''self.markdown_file = self.options_dict.get('-f')self.css_file = self.options_dict.get('-S')self.html_file_dir = self.options_dict.get('-d')self.html_file = self.options_dict.get('-F')

编写转换文本类

在 mth.py 文件中定义 Markdown2Html 类,用以将 Markdown 文本转换为 HTML 文本并保存。

因为 markdown 模块生成的 HTML 代码是不包括 head 标签的,这样会可能造成浏览器中渲染 HTML 时显示乱码,而且我们有时可能也需要添加 CSS 来美化网页,所以需要一个数据属性存放生成 HTML 代码时用到的 head 标签以及准备存放可能用到的 style 标签。

这部分处理工作在初始化时完成:

class Markdown2Html:'''将 Markdown 文档转换为 HTML 文档并存储'''# HTML 文档的默认 head 标签head_tag = '<head><meta charset="utf-8" /></head>'def __init__(self, css_file=None):''' 初始化方法,处理未来向 HTML 文档中添加的 head 标签'''if css_file:with open(css_file) as f:data = f.read()self.head_tag = (self.head_tag[:-7] +'<style type="text/css">{}</style>'.format(data) +self.head_tag[-7:])

然后是脚本的核心方法,用于将 Markdown 文本转换为 HTML 文本:

    def switch(self):'''核心方法,将 Markdown 文本转换为 HTML 文本并保存'''# 读取 Markdown 文件内容with open(args.markdown_file) as f:markdown_text = f.read()# 将 Markdown 文件内容转换为 HTML 文本# 参数 output_format 指定转换格式value = markdown.markdown(markdown_text, output_format='html5')# 为 HTML 文本添加 head 标签html_raw = self.head_tag + value# 使用 bs4 模块美化文本html_beautiful = BeautifulSoup(html_raw, 'html5lib').prettify()# 处理存储 HTML 文件的目录if args.html_file_dir[-1] != '/':args.html_file_dir += '/'# 处理 HTML 文件名if not args.html_file:args.html_file = os.path.splitext(os.path.basename(args.markdown_file))[0] + '.html'# 存储 HTML 文本的路径html_file_route = args.html_file_dir + args.html_file# 将 HTML 文本存入文件with open(html_file_route, 'w') as f:f.write(html_beautiful)

关于 os.path 模块的用法说明:

  • os.path.abspath() 将参数路径转为绝对路径并返回

  • os.path.dirname() 获得参数路径的目录部分并返回(例如 "\home\a.txt" 为参数,返回 "\home" )

  • os.path.basename() 返回参数路径字符串中的完整文件名(文件名 + 后缀名)

  • os.path.splitext() 将参数转换为包含文件名和后缀名两个元素的元组并返回

关于 os 模块更多详情,参见官方文档。

在使用 with open 语句读写文件时,无需提供 encoding='utf8' 参数,因为 Python3 默认的读写编码格式就是 UTF-8 。

以上为转换文本的全部代码。定义好解析参数类和转换文本类之后,依次创建它们的实例,然后调用 switch 方法即可实现功能:

if __name__ == '__main__':args = ArgsParse()markdown2html = Markdown2Html(args.css_file)markdown2html.switch()

测试脚本

在 /home/shiyanlou/Code 目录下使用 wget 命令把测试用的 markdown 文件下载下来:

$ wget http://labfile.oss.aliyuncs.com/courses/580/test.md

以及测试用的 CSS 文件:

$ wget http://labfile.oss.aliyuncs.com/courses/580/GithubMarkdownCSS.css

一切就绪,开始执行脚本。

首先测试帮助功能:

shiyanlou:Code/ $ python3 mth.py -h
Options:-h, --help  参数说明-f          被处理的 Markdown 文件-S          美化页面的 CSS 文件-d          转换成 HTML 文件后,新文件所在目录路径-F          转换成 HTML 文件后,新文件的文件名
shiyanlou:Code/ $ python3 mth.py --help
Options:-h, --help  参数说明-f          被处理的 Markdown 文件-S          美化页面的 CSS 文件-d          转换成 HTML 文件后,新文件所在目录路径-F          转换成 HTML 文件后,新文件的文件名
shiyanlou:Code/ $

然后执行转换脚本的命令:

shiyanlou:Code/ $ ls
GithubMarkdownCSS.css  mth.py  test.md
shiyanlou:Code/ $ python3 mth.py -f test.md -S GithubMarkdownCSS.css -d . -F test.html
shiyanlou:Code/ $ ls
GithubMarkdownCSS.css  mth.py  test.html  test.md
shiyanlou:Code/ $ head test.html
<html><head><meta charset="utf-8"/><style type="text/css">body {font-family: Helvetica, arial, sans-serif;font-size: 14px;line-height: 1.6;padding-top: 10px;padding-bottom: 10px;
shiyanlou:Code/ $

大家可以打开文件管理器,找到文件后使用浏览器打开:

三、完整代码

可以在实验环境中用如下命令下载:

$ wget http://labfile.oss.aliyuncs.com/courses/580/mth.py

完整代码:

完整代码及后续教程,欢迎打开实验楼进行学习,课程地址:

https://www.shiyanlou.com/courses/580

????????????点击阅读原文,查看完整教程

手把手教你用 Python 编写 3 个实用脚本,早掌握早下班~相关推荐

  1. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

    原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...

  2. python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...

    www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...

  3. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  4. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  5. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  6. python兔子和獾_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(三)

    让小兔子转向 现在,你的小兔子可以根据你的按键移动了! 不过现在小兔子一直面向右边.如果能用鼠标让小兔子面对不同的方向,不就更酷了吗!我们只需要用一些简单的三角函数知识就能解决这个问题. 让我们一起看 ...

  7. python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...

  8. python android自动化元素定位_linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例...

    linux下Appium+Python移动应用自动化测试实战-3.手把手教你定位元素编写测试用例 前言 有很多童鞋环境搭建好了却没有进行下一步,是因为缺少step by step的资料. 互联网上ap ...

  9. 手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 桃之夭夭,灼灼其华. /1 前言/ ...

最新文章

  1. POJ2631 Roads in the North
  2. 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
  3. mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
  4. java 圆 继承_java 类的继承(转)
  5. lcase和ucase_在SQL中使用UCASE(),LCASE()和MID()函数
  6. ssis for循环容器_SSIS Foreach循环与For循环容器
  7. PHP设计模式——备忘录模式
  8. 获取中国各省市区县经纬度的方法
  9. JavaScript高级(二)
  10. 远程桌面连接:系统管理员已限制你登录的计算机处理方法
  11. Linux设置root权限
  12. P站-画师通图片如何保存为原图
  13. js数组操作(pop,push,unshift,splice,shift方法)
  14. CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
  15. CCF CSP 201803-4 棋局评估
  16. 2016微软校招笔试题
  17. 芜湖今年小升初计算机考试,刚刚!芜湖幼升小、小升初网上报名时间定了!附报名流程和具体安排...
  18. 毕业设计-基于微信小程序的高校实验室安全教育系统
  19. 【高等代数】线性方程组的解法
  20. 包装对象、对象常用操作、继承

热门文章

  1. 计算机主机主板,计算机主板的基本组成部分
  2. snmp的团体名配置_SNMP的配置
  3. java批量下载多个阿里云视频
  4. 手拿菜刀砍电线,一路火花带闪电,神经病人思维广,弱智孩子欢乐多!
  5. 截流式合流制设计流量计算_截流式合流制计算
  6. XechWic工作室,视频会议,p2p开发库
  7. Colab使用方法,以及读取Google drive中的文件太慢的解决办法(亲测有效)
  8. 雅思听力旅游度假场景词汇
  9. android开发:android获取IMEI、MSISDN、ICCID、IMSI
  10. 计算机鼠标透明度,给电脑添加透明护眼蒙版(鼠标穿透)