序列化 加密 OS sys 模块

序列化模块

# 文件存取时,遇到的矛盾.
# 数据 读取出来时,反转不回去.
# 凡是数据通过网络传出去最终的格式必须bytes

# 序列化模块作用:
# 将一组数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去.
# json 模块: 是所有语言公认的一种序列.最最常用的
# 所以支持的python数据结构有限: int str bool dict list(tuple),None,float
# pickle模块: 只能python语言中使用的,序列化模块:
# 支持python所有的数据类型以及对象.
import json
# dumps,loads 主要用于网络传输,可以用于文件的存取.
# dic = {'username': '太白', 'password': 123,'status': False}
# ret=json.dumps(dic)
# print(ret,type(ret))
# ret_dict = json.loads(ret)
# print(ret,type(ret_dict))

# 特殊的参数ensure_ascii确定是不是使用ascii码 sort_keys我可以给这个字典排序
# dic = {'username': '太白', 'password': 123,'status': False}
# ret = json.dumps(dic,ensure_ascii=False,sort_keys=True)
# print(ret,type(ret))

# dump load: 单个数据的存取文件.
# import json
# dic = {'username': '太白', 'password': 123,'status': False}
# with open('jsonlx1.json',encoding='utf-8',mode='w') as f1:
#     json.dump(dic,f1)
#
# with open('jsonlx1.json',encoding='utf-8') as f1:
#     dic1 = json.load(f1)
# print(dic1,type(dic1))

# 多个数据如何存储到一个文件中 必须换行 不然读取时不识别 会报错?
# import json
# dic1 = {'username': '太白', 'password': 123,'status': False}
# dic2 = {'username': 'alex', 'password': 123,'status': False}
# dic3 = {'username': 'ly', 'password': 123,'status': False}

# with open('jsonmore.json',encoding='utf-8',mode='a') as f1:
#     f1.write(f'{json.dumps(dic1)}\n{json.dumps(dic2)}\n{json.dumps(dic3)}')
#
# with open('jsonmore.json',encoding='utf-8') as f1:
#     for line in f1:
#         ret = json.loads(line)
#         print(ret,type(ret))

# pickle
import pickle # dumps,loads  只能是网络传输#只能python语言中使用的,序列化模块 支持python所有的数据类型以及对象.

# dumps,loads  只能是网络传输  直接转化为字节
# l1 = ['wusir', '太白', '小黑', 666]
# ret = pickle.dumps(l1)
# print(ret)

# l2 = pickle.loads(ret)
# print(l2,type(l2))

# dump load 数据结构存取文件.
import pickle
# l1 = ['wusir', '太白', '小黑', 666]
# with open('pickle练习.pickle',mode='wb') as f1:
#     pickle.dump(l1,f1)

# with open('pickle练习.pickle', mode='rb') as f1:
#     ret = pickle.load(f1)
#     print(ret,type(ret))



# 多个数据写入文件
# l1 = ['wusir', '太白', '小黑1', 666]
# l2 = ['wusir', '太白', '小黑2', 666]
# l3 = ['wusir', '太白', '小黑3', 666]
# with open('pickle练习1.pickle',mode='wb') as f1:
#     # pickle.dump(l1,f1)
#     # pickle.dump(l2,f1)
#     # pickle.dump(l3,f1)
#
# with open('pickle练习1.pickle', mode='rb') as f1:
#     # ret1 = pickle.load(f1)
#     # ret2 = pickle.load(f1)
#     # ret3 = pickle.load(f1)
#     # print(ret1,ret2,ret3)
#     while 1:
#         try:
#             ret1 = pickle.load(f1)
#             print(ret1)
#         except Exception:
#             break
#

sys模块

import sys
# sys.path  ***
# print(sys.version)  # 版本

# for i in range(3):
#     print(i)
# # exit()  # 强制退出
# # quit()
# for i in range(5):
#     print(i)

# print(sys.platform)

os 模块

import os
# 重点要记
# print(os.getcwd())#上一级绝对路径  ***
# print(__file__)  # 动态获取当前文件的绝对路径
#父级目录的获取:只用加上os.path.dirname(当前路径)即可
os.path.dirname(os.path.dirname(__fifl__))#爷爷级路径

# print(os.chdir("dirname"))  改变当前脚本工作目录;相当于shell下cd  **
# print(os.curdir)  #返回当前目录: ('.')  **
# print(os.pardir) #获取当前目录的父目录字符串名:('..') **

# 和文件夹相关
# os.makedirs('dirname1/dirname2')    可生成多层递归目录  ***
# os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 ***
# os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname ***
# os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname ***
# os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 **
# 
# # 和文件相关
# os.remove()  删除一个文件  ***
# os.rename("oldname","newname")  重命名文件/目录  ***
# os.stat('path/filename')  获取文件/目录信息 **
# 
# 和操作系统差异相关
# os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" *
# os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" *
# os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为: *
# os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix' *
# 和执行系统命令相关
# os.system("bash command")  运行shell命令,直接显示  **
# os.popen("bash command).read()  运行shell命令,获取执行结果  **
# os.environ  获取系统环境变量  **

#path系列,和路径相关
# os.path.abspath(path) 返回path规范化的绝对路径  ***
# os.path.split(path) 将path分割成目录和文件名二元组返回 ***
# os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素  **
# os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 **
# os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False  ***
# os.path.isabs(path)  如果path是绝对路径,返回True  **
# os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False  ***
# os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False  ***
# os.path.join(A,B)  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 拼接路径 ***
# os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间  **
# os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间  **
# os.path.getsize(path) 返回path的文件大小 文件的字节数 ***

hashlib模块

import hashlib
# 密码加密
# 文件的一致性校验
# 加盐就是加在前面
# sha系列: 安全系数高,耗时高.
# ret = hashlib.sha512()
# 分步update 与一次性updete效果一样 所以文件效验可以for循环

import hashlib
new_md5 = hashlib.md5()  #创建hashlib的md5对象
new_md5.update('字符串'.encode(‘utf-8))  #将字符串载入到md5对象中,获得md5算法加密#注意这里必须要编码,否则报错。
print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。
简单来说。就是三步:
1,建立加密对象。2,对字符串进行算法加密。3,获得16进制显示

# md5
# 加固定盐
ret = hashlib.md5('1'.encode('utf-8'))#1就是盐
# ret.update('23456'.encode('utf-8'))#动态盐就是设置变量
s = ret.hexdigest()
print(s,type(s))

# 文件加密效验
import hashlib
def md5_file(path):
    ret = hashlib.md5()
    with open(path,mode='rb') as f1:
        while 1:
            content = f1.read(1024)
            if content:
                ret.update(content)
            else:
                return ret.hexdigest()
print(md5_file(r'D:\s23\day17\python-3.7.4rc1-embed-win32.zip'))

猜你喜欢

转载自www.cnblogs.com/saoqiang/p/12388543.html