目录
什么是模块?
import XXX ------ XXX就是模块,自己定义的xxx.py文件本质就是模块
模块的分类
通过内置的模块
UUID OS math random
第三方模块
程序员、组织、公司等创建的第三方模块,如果需要使用第三方模块,就需要进行相应的安装
在线安装
cmd --- pip install 模块名称 python -m pip install 模块名称
离线安装
先下载好安装包XXX.zip 解压安装包 安装setup.py cmd python install setup.py
自定义模块
XXX.py
模块的导入
import关键字 ------ import math
import 模块名称 as 别名
import os.path as p
from 包 import 模块名称
random模块
主要用于产生随机数
randint ------ 产生随机的整数[m,n]
random ------ 产生的是0~1([0,1])之间的随机数
uniform ------- 产生的是一个基于正态分布的随机数(一般不用)
randrange ------ 产生的是一个范围内的随机数
choice ------ 在序列(有序 set是无序的)中随机筛选一个元素
math模块
数学运算
cell ----- 天花板 向上取整
floor ------ 向下取整
e ------ 属性 自然常熟
fabs ------ 取绝对值 等价于全局函数中的abs()
fmod ------ 求模运算
isnan ------- 判断是不是一个数字(nan ---- not a number) 返回的是一个布尔值,如果数字是NaN(不是数字),则返回的是True,否则返回的就是False
代码示例:
>>> math.isnan(56)
False
>>> math.isnan(-56)
False
>>> math.isnan(math.nan)
True
isinf ------ 判断是不是无穷大,返回的是一个布尔值,如果是正无穷大或者负无穷大,则返回的True,否则返回的就是False
代码示例:
>>> math.isinf(56)
False
>>> math.isinf(-56)
False
>>> math.isinf(math.inf)
True
>>> math.isinf(-math.inf)
True
isfinite ----- 判断是不是无限
pi ------ 圆周率
pow ----- 幂次方
sqrt ----- 根号 开平方根
os模块
操作的是文件系统的模块
chdir(path) ------ 修改当前工作目录(一般不会进行更改)
curdir ------ 属性 获取当前目录 注意返回的是相对路径(绝对路径 os.path.abspath(os.curdir))
chmod() ------ 修改权限(一般用到Linux)
close ------ 关闭文件路径
cpu_count() ------ 返回的是cpu核所对应的数据线(2核4线程)
getcwd() ------ 获取当前的路径,返回的是绝对路径,相对Linux下的pwd命名
getpid() ------ 获取当前的进程的进程编号
getppid() ------- 获取当前进程的父进程的进程编号
kill() ------- 通过进程编号杀死进程
linesep ------ 对应系统下的换行符
listdir() ------ 返回的是对应目录下所有文件及其文件夹(隐藏文件夹也可以调取出来)
makedirs() ------ 创建目录,支持多层创建目录(文件夹)
mkdir() ------ 创建目录,只支持一层创建,不能多层创建
open ------ 创建文件,等价于全局函数open()(IO流)
pathsep ------ 获取环境变量的分隔符 Windows;linux;
sep ------- 获取路径的分隔符
remove(文件名或者路径) ------- 删除文件
removedirs() ------- 移除目录,支持多级删除(递归)
system() ------- 执行终端命令 os.system("cls") ------ 清屏
os.path模块
import os
dir(os.path)
import os.path
import os.path as p
abspath(相对路径) ----- 返回对应路径的绝对路径 os.path.abspath(".")
altsep ------ 查看python中的各个符号
basename ------- 文件名称,shell编程语言中也有
dirname ------ 文件所在目录,shell编程语言中也有
exists ------- 判断文件或者目录是否存在(在使用爬虫的时候特别有用)
getatime
getctime
getmtime
getsize ------- 获取文件的大小,单位是字节
isdir ------ 判断path是不是目录(文件夹)
isfile ------- 判断path是不是文件
isabs ------- 判断是不是绝对路径
islink ------- 判断是不是链接
ismount ------- 判断是不是挂载文件(Linux下使用)
join (path1,path2) ------ 拼接路径 name = "123.txt" url = "D:\a\c" url + "\" + name
path.join(url,name)
sep ------- 路径的分隔符
split ------ 分割路径
realpath ------- 返回真实的路径 和abspath是一样的
习题:
使用os和os.path以及函数的递归完成,给出一个路径,遍历当前路径所有的文件以及文件夹,打印出书所有文件(遇到文件输出路径,遇到文件夹继续进文件夹)
代码示例:
import os
from os import path
#定义一个函数
def scanner_flie(url):
#os.listdir 输出文件及文件夹
files = os.listdir(url)
#print(flies)
#路径的拼接,有三种方式
for i in files:
#real_url = url + "\\" + i
#real_url = url + os.sep + i
real_url = path.join(url,i)
#print(real_url)
#判断是不是文件或者文件夹(目录)
if path.isfile(real_url):
print(path.abspath(real_url))
#是一个目录(文件夹)
elif path.isdir(real_url):
scanner_flie(real_url)
else:
print("其他情况")
pass
scanner_flie("D:\\computer")
注意:
不建议使用C盘
sys模块
api_version ------- 获取当前python内部版本号
argv ------- 接收脚本参数,注意的是第一个参数是脚本的名称,返回的结果是列表
copyright ------- 输出python的版本信息
exit() -------- 退出系统
getdefaultencoding() ------- 获取的默认的编码,默认的是utf-8(python3)
getfilesystemencoding() ------- 获取系统文件默认编码,默认的是utf-8
getrecursionlimit() ------ 获取python对递归的限制层数
setrecursionlimit() ------- 重新设置递归限制层数,注意能不用的时候就尽量不要用,以免造成其他问题
getrefcount(对象) ------- 获取的是对象的引用计数,是垃圾回收机制中引用计数
>>> ls = [1,2,3,4]
>>> sys.getrefcount(ls)
2 #默认有一个引用计数,再加上ls
>>> a = ls
>>> sys.getrefcount(ls)
3
>>> b = ls
>>> sys.getrefcount(ls)
4
getwindowsversion() ------ 返回的窗口的版本信息
version ------- 获取版本信息
python中垃圾回收机制是引用计数为主,以标记清除和分代收集为辐
Java:以标记清除为主,以引用计数和分代收集为辐
练习:
根据脚本参数更改os.path中的练习题
import os
from os import path
#定义一个函数
def scanner_flie(url):
#os.listdir 输出文件及文件夹
files = os.listdir(url)
#print(flies)
#路径的拼接,有三种方式
for i in files:
#real_url = url + "\\" + i
#real_url = url + os.sep + i
real_url = path.join(url,i)
#print(real_url)
#判断是不是文件或者文件夹(目录)
if path.isfile(real_url):
print(path.abspath(real_url))
#是一个目录(文件夹)
elif path.isdir(real_url):
scanner_flie(real_url)
else:
print("其他情况")
pass
#scanner_flie("D:\\computer")
ls = sys.argv
if len(ls) < 2:
print("对不起,这个需要输入脚本参数,参数是需要遍历的路径(磁盘)")
else:
#scanner_flie(sys.argv[1])
scanner_flie(ls[1])
加密算法
加密算法的分类:
按照算法是否可逆:
可逆算法:
是不是使用同一个密钥:
对称加密:解密和加密使用的是同一个密钥(可以暴力破解) DES算法
不对称加密:解密和加密时候使用的一对密钥(公钥,私钥)
不可逆算法:
特点:不可逆、结果唯一 MD5
hashlib库
import hashlib
dir(hashlib)
哈希算法实现
使用步骤:
创建一个算法对象(md5 sha256),返回一个算法对象,注意的是接收的是字节数据,不是字符串,所以需要将字符串转换为字节数据
代码示例:
>>> md5 = hashlib.md5("12345".encode("utf-8"))
>>> md5.hexdigest()
'827ccb0eea8a706c4c34a16891f84e7b'
没有做盐值混淆的情况下,密文很容易被破解
一般要使用盐值混淆进行加密
md5.update(salt)
代码示例:
>>> md5 = hashlib.md5("12345".encode("utf-8"))
>>> md5.update("@@#$%^^&&*###!!!!".encode("utf-8"))
>>> md5.hexdigest()
'5b3b1111cba1e996e2cbd78df871ad0c'
注意:
盐值越复杂,加密越安全
hmac
hmac也是一个哈希加密库,而且用到了对称加密
参数:
第一个参数是要加密的字符串
第二个参数是盐值
第三个参数是加密算法
代码:
>>> MD5 = hmac.new("12345".encode("utf-8"),"hahhah&&&&".encode("utf8"),hashlib.md5)
>>>
MD5.hexdigest()
'4deb2ab2f5ad1aecbf0dcb8142a853a8'
首先使用对称加密(密钥就是盐值),之后又将加密后的数据再进行了依次hash加密,进行了盐值混淆,所以这个结果非常安全