1> js2py模块
import js2py
# 创建 js 执行环境
context = js2py.EvalJs()
fun_js = """
function add(a,b){
return a+b
}
"""
# 加载 js 文件
context.execute(fun_js)
# 输出函数
print(context.add(2,3))
2> hash 模块
import hashlib
str = '人生苦短'
# 创建 hash 对象
md5 = hashlib.md5()
# 传递参数
md5.update(str.encode())
# 获取 hash 值
print(md5.hexdigest())
3> quote和 unquote 模块
中文字符和 %xx 的字符的转换
urllib.parse.quote('厦门自由行') # %E5%8E%A6%E9%97%A8%E8%87%AA%E7%94%B1%E8%A1%8C
urllib.parse.unquote('%E5%8E%A6%E9%97%A8%E8%87%AA%E7%94%B1%E8%A1%8C') # 厦门自由行
4> os模块
① 系统模块
表达式 | 说明 |
os.sep | 系统路径的分隔符 |
os.name | 您使用的工作平台,windows-nt,linux-posix |
os.getenv(环境变量名) | 读取环境变量 |
os.getcwd() | 获取当前路径 |
② 目录/文件操作
表达式 | 说明 |
os.listdir(path) | 返回指定目录下的所有文件和目录名 |
os.mkdir(path) | 创建空目录 |
os.rmdir(path) | 删除空目录,若目录中有文件则无法删除 |
os.makedirs(path) | 生成递归目录,如果目录全部存在,则创建目录失败 |
os.removedirs(path) | 删除多层递归的空目录, 若目录中有文件则无法删除 |
os.chdir(path) | 改变当前目录,到指定目录中 |
os.rename(原文件绝对路径,新文件绝对路径) | 重命名文件或目录名 |
os.remove(path) | 删除文件 |
③ 判断
表达式 | 说明 |
os.path.exists(path) | 判断文件或目录是否存在,返回布尔值 |
os.path.isfile(path) | 判断是否为文件 |
os.path.isdir(path) | 判断是否为目录 |
④ path相关
表达式 | 说明 |
os.path.basename(path) | 返回文件名 |
os.path.dirname(path) | 返回文件路径 |
os.path.getsize(name) | 获得文件大小 |
os.path.abspath(name) | 获得绝对路径 |
os.path.join(path,name) | 连接目录与文件名或目录 |
os.path.splitext(path) | 分离文件的扩展名和文件名 |
5> shutil 模块
from shutil import copyfile
from shutil import copy
from shutil import move
① 文件复制
copyfile(src_path, dst_path)
将src文件内容复制至dst文件, 若dst文件不存在,将会生成一个dst文件,若存在将会被覆盖
Ori_Path = 'e:/ori/1.txt'
Tar_Path = 'e:/dst/2.txt'
copyfile(Ori_Path, Tar_Path)
② 文件复制到文件夹内
copy(src_path, dst_path)
将src文件内容复制至dst文件夹内, 若存在同名的文件,则会报错
from shutil import copy
import os
Ori_Path = 'e:/assets/ori_img'
Tar_Path = 'e:/assets/album/copy_img'
img_names = os.listdir(Ori_Path)
for img_name in img_names:
ori_img_path = Ori_Path + '/' + img_name
copy(ori_img_path, Tar_Path)
③ 剪切文件到文件夹内
from shutil import copy
import os
Ori_Path = 'e:/assets/ori_img'
Tar_Path = 'e:/assets/album/copy_img'
img_names = os.listdir(Ori_Path)
for img_name in img_names:
ori_img_path = Ori_Path + '/' + img_name
move(ori_img_path, Tar_Path)
6> re模块
import re # 导入re模块
result = re.match(正则表达式,要匹配的字符串) # 使用match方法进行匹配操作
result.group() # 如果上一步匹配到数据的话,可以使用group方法来提取数据
① 匹配单个字符
代码 | 功能 |
. | 匹配任意1个字符(除了\n) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即空格或tab键 |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W | 匹配特殊字符 |
② 匹配多个字符
代码 | 功能 |
* | 匹配前一个字符出现0次或者多次,即可有可无 |
+ | 匹配前一个字符出现1次或者多次,即至少1次 |
? | 匹配前一个字符出现0次或者1次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,n} | 匹配前一个字符最少出现m次,做多出现n次 |
③ 匹配开头和结尾
④ 匹配指定字符之外的字符
[^指定字符]: 表示除了指定字符都匹配
⑤ 匹配分组相关正则表达式
代码 | 功能 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?p<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
match_obj = re.match("apple|pear", value)
match_obj = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo)\.com", "hello@163.com")
atch_obj = re.match("(qq):([1-9]\d{4,10})", "qq:10567")
print(match_obj.group(1))
match_obj = re.match("<[a-zA-Z1-6]+>.*</[a-zA-Z1-6]+>", "<html>hh</div>")
atch_obj = re.match("<([a-zA-Z1-6]+)>.*</\\1>", "<html>hh</html>")
match_obj = re.match("<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")
match_obj = re.match("<(?P<name1>[a-zA-Z1-6]+)><(?P<name2>[a-zA-Z1-6]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
⑥ 常用正则表达式
a. 数字相关
表达式 | 说明 |
^[0-9]*$ | 数字 |
^\d{n,}$ | n位数字 |
^\d{m,n}$ | m-n位数字 |
^(0|[1-9][0-9]*)$ | 零和非零开头的数字 |
^[1-9]\d*$ | 非零的正整数 |
^-[1-9]\d*$ | 非零的负整数 |
^\d+$ | 非负整数 |
^-[1-9]\d*|0$ | 非正整数 |
^\d+(\.\d+)?$ | 非负浮点数 |
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ | 非正浮点数 |
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ | 正浮点数 |
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ | 负浮点数 |
^(-?\d+)(\.\d+)?$ | 浮点数 |
b. 字符相关
表达式 | 说明 |
^[\u4e00-\u9fa5]{0,}$ | 汉字 |
^[A-Za-z0-9]+$ | 英文和数字 |
^.{3,20}$ | 长度为3-20的所有字符 |
^[A-Za-z0-9]+$ | 由数字和26个英文字母组成的字符串 |
^[\u4E00-\u9FA5A-Za-z0-9_]+$ | 中文、英文、数字包括下划线 |
[^%&’,;=?$\x22]+ | 含有^%&’,;=?$\”等字符 |
c. 特殊格式
表达式 | 说明 |
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ | Email地址 |
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? | 域名 |
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$ | URL |
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ | 手机号码 |
^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$ | 电话号码 |
^\d{15}|\d{18}$ | 身份证号(15位、18位数字) |
^\d{4}-\d{1,2}-\d{1,2} | 日期格式 |
[\u4e00-\u9fa5] | 中文字符 |
\n\s*\r | 空白行 |
\d+\.\d+\.\d+\.\d+ | IP地址 |
[1-9]\d{5}(?!\d) | 中国邮政编码 |