手把手教你用 Python 编写 3 个实用脚本,早掌握早下班~
脚本写的好,下班下得早!程序员一大特长就是用程序实现自动化脚本,让枯燥、重复的工作自动执行~
能否写出高效实用的脚本代码,直接影响着一个程序员的幸福生活 [下班时间]。今天我们就手把手教你用 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 个实用脚本,早掌握早下班~相关推荐
- 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...
- python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...
www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...
- python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)
原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...
- 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)
游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...
- 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...
- python兔子和獾_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(三)
让小兔子转向 现在,你的小兔子可以根据你的按键移动了! 不过现在小兔子一直面向右边.如果能用鼠标让小兔子面对不同的方向,不就更酷了吗!我们只需要用一些简单的三角函数知识就能解决这个问题. 让我们一起看 ...
- python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...
- python android自动化元素定位_linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例...
linux下Appium+Python移动应用自动化测试实战-3.手把手教你定位元素编写测试用例 前言 有很多童鞋环境搭建好了却没有进行下一步,是因为缺少step by step的资料. 互联网上ap ...
- 手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 桃之夭夭,灼灼其华. /1 前言/ ...
最新文章
- POJ2631 Roads in the North
- 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
- mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
- java 圆 继承_java 类的继承(转)
- lcase和ucase_在SQL中使用UCASE(),LCASE()和MID()函数
- ssis for循环容器_SSIS Foreach循环与For循环容器
- PHP设计模式——备忘录模式
- 获取中国各省市区县经纬度的方法
- JavaScript高级(二)
- 远程桌面连接:系统管理员已限制你登录的计算机处理方法
- Linux设置root权限
- P站-画师通图片如何保存为原图
- js数组操作(pop,push,unshift,splice,shift方法)
- CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
- CCF CSP 201803-4 棋局评估
- 2016微软校招笔试题
- 芜湖今年小升初计算机考试,刚刚!芜湖幼升小、小升初网上报名时间定了!附报名流程和具体安排...
- 毕业设计-基于微信小程序的高校实验室安全教育系统
- 【高等代数】线性方程组的解法
- 包装对象、对象常用操作、继承
热门文章
- 计算机主机主板,计算机主板的基本组成部分
- snmp的团体名配置_SNMP的配置
- java批量下载多个阿里云视频
- 手拿菜刀砍电线,一路火花带闪电,神经病人思维广,弱智孩子欢乐多!
- 截流式合流制设计流量计算_截流式合流制计算
- XechWic工作室,视频会议,p2p开发库
- Colab使用方法,以及读取Google drive中的文件太慢的解决办法(亲测有效)
- 雅思听力旅游度假场景词汇
- android开发:android获取IMEI、MSISDN、ICCID、IMSI
- 计算机鼠标透明度,给电脑添加透明护眼蒙版(鼠标穿透)