time模块
时间的格式:
1)时间戳:从1970年到现在经历的秒数
time.time()
2)按格式:2020-3-30 11:11:00
time.strftime('%Y-%m-%d %H:%M:%S %p')
时分秒:也可以用%X
3)结构化的时间:用于获取当前时间的某一个部分
res = time.localtime()
res.tm_year
datetime模块
datetime.datetime.now()
格式化时间
datetime.datetime.now() + datatime.timedelta(days = -3)
计算三天前的时间,time模块这个就不方便了
time.mktime(参数) 将结构化转为时间戳
time.localtime(参数) 将时间戳转为结构化时间
time.gmtime() 世界标准时间,结构化时间
time.strftime('...',time.localtime(或者参数)) 将结构化时间转为格式化时间
time.strptime('2020-3-30','%Y-%m-%d') 将格式化时间字符串转为结构化时间
格式相互转化以结构化时间为中间站
time.asctime() 得到:Mon Mar 30 09:52:14 2020
datetime.datetime.utcnow()
datetime.datetime.fromtimestamp(时间戳)
random模块
random.random() (0,1) >0 <1 float
random.randint(1,3) [1,3] >=1 <= 3 int
random.randrange(1,3) [1,3) >=1 < 3 int
random.choice([...]) 选出一个来
random.sample([...],2) 随机取出两个
random.uniform(1,3) (1,3) float
random.shuffle(item) 洗牌
随机验证码
chr将数字转为ASCII码的数字或字母
os模块
os.getcwd() 获取当前工作目录
os.chdir(参数) 切换工作目录
os.makedirs() 创建多层文件夹
os.removedirs() 删除这个文件上面层级的空文件夹,此文件夹没有子文件夹
os.mkdir() 生成单级目录
os.rmdir() 删除单级空目录
os.listdir() 查看文件夹下面的文件和文件夹
os.listdir('.') 看当前文件夹
os.path.getsize() 查看路径下文件的大小
os.remove() 删除
os.rename() 重命名
os.system('系统命令') 执行系统命令
os.environ 环境变量:key,value 必须为字符串,将路径变量添加到全局,用于软件的执行时,全部都用到
sys.path 是导入模块的变量
PATH 执行系统命令的变量
os.path.abspath 返回绝对路径,路径分隔符为平台的默认
__file__ /////////////
os.path.split() 元组(文件夹,文件名)
os.path.dirname() 获取上层文件夹路径
os.path.basename() 获取当前文件
os.path.isabs() 是否是绝对路径
os.path.join() 连接路径,以根目录开始连接
os.path.isfile() 判断是否是一个文件
os.path.isdir() 判断是否是一个文件夹
3.5 以后
Path 模块:res = Path(__file__).parent.parent
res = Path('...') / '...' 拼接路径,,,
res.resolve() 把斜杠换成正规的平台默认的符号
sys模块
sys.path 模块查找路径
sys.argv 接收程序外的输入
python run.py 1 2 3
argv 接收 1 2 3
argv = [run文件路径,1,2,3]
进度条:
'[%-50s]'%'#'
左对齐50位
for
print('\r[%-50s]'%'#',end = '')
shutil模块
对文件进行各种操作
压缩
序列化和反序列化
json&pickle
序列化是指把内存的数据类型转换为一个特定的格式内容
内存中的数据 ——> 特定的格式(json或pickle) :序列化
特定的格式(json或pickle)——> 内存中的数据 :反序列化
序列化的内容:
用于存储 = 》 用于存档
传输给其它平台使用 = 》 跨平台数据交互
专用于python:pickle :存档
通用于所有语言:json
import json
res = json.dumps(True)
序列化,json格式
res = json.loads(res)
反序列化,Python可以识别的数据类型
序列化结果,写入文件的简单方法:
with ... as f:
json.dump('...',f)
with ... as f:
l = json.load(f)
json 格式兼容所有语言的数据类型,不能识别某一语言的特定类型
loads:3.5 不能反序列化 bytes
l = json.loads(b'[1, "aaa", true, false]')
print(l, type(l))
with open('json.txt',mode='rb') as f:
l=json.load(f)
# 了解
# l = json.loads(b'[1, "aaa", true, false]')
# print(l, type(l))
# TypeError: the JSON object must be str, not 'bytes'
# with open('json.txt',mode='rb') as f:
# l=json.load(f)
# TypeError: the JSON object must be str, not 'bytes'
# res=json.dumps({'name':'哈哈哈'})
# print(res,type(res))
# res=json.loads('{"name": "\u54c8\u54c8\u54c8"}')
# print(res,type(res))
pickle.dumps loads dump load
猴子补丁:
所有后引用的同一个模块都指向第一次引用模块的地址,所以,改进模块,要在首次
导入模块的位置修改,比如说start.py里改
ujson 和 json 使用方式一样,但是速度更快
json.dumps = ujson.dumps
import ujson as json
每个文件,都要改,只是起了个别名,在主文件名称空间里的,不影响json空间
所以,不合适
可以替换,,,
pickle.dumps loads dump load
import pickle
res = pickle.dumps()
bytes
python2:
pickle.dump('你',f,protocol = 2)
xml 模块
shelve 模块
configparser 模块 as con
ConfigParser :Python2
配置文件:注释:# ;
[section1]
k1 = v1
k1 : v1
conf = con.ConfigParser()
conf.read('...')
获取配置文件
conf.sections() 得到所有的section
conf.options('section1') 获取下面的option,查看标题section1下所有key
conf.items('section1') 获取配置元组,('k1','v1'),查看标题section1下所有items
res = conf.get('section1','user') 获得user的值,str
conf.getboolean('section1','is_admin') 直接获得bool值
getfloat
getint
hashlib 模块
哈希:算法,为该算法传入值,经过运算得到hash值,
传入的值一样,得到的hash值必然一样,
不能通过hash值反推出原来的值,
得到的值长度是一定的
加密
撞库破解
防止撞库:加盐
提升撞库成本,
m.update('天王'.encode('utf-8'))
m.update('alex3714'.encode('utf-8'))
m.update('盖地虎'.encode('utf-8'))
加入一些无关紧要的东西,
密文字典,如何截获密文
验证完整性
import hashlib
m = hashlib.md5('wanglin'.encode('utf-8')) 得到密文的密码
m.update('hello'.encode('utf-8'))
m.updete('world'.encode('utf-8'))
res = m.hexdigest()
验证:取样验证
subprocess 模块
import subprocess
obj = subprocess.Popen('系统命令',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIP)
obj 对象
obj.stdout.read() 正确的结果
res = obj.stderr.read() 错误的结果
res.decode('gbk')
; 分隔好几个命令,其中有运行正确的,也有错误的,可以分别输出