首页 > 其他 > 详细

内置模块

时间:2019-06-27 23:15:55      阅读:119      评论:0      收藏:0      [点我收藏+]

1.序列化模块

序列化:将一个数据结构(list,dict...)转化成一个特殊的序列(特殊的字符串)的过程
序列化模块: 将一种数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去.
1.json模块: 是所有语言公认的一种序列.最常用的,但支持的python数据结构有限=>int,str,bool,dict,list,tuple,None,float
2.pickle模块: 只能python语言中使用的,支持python所有的数据类型以及对象.
3.shevle模块(了解): 只能是文件存取.
1.1 json序列化
import json
# dumps,loads 主要用于网络传输,可以用于文件的存取.
dic = {'username': '太白', 'password': 123,'status': False}
ret = json.dumps(dic)
print(ret)
ret_dict = json.loads(ret)
print(ret_dict)
# 特殊的参数
dic = {'username': '太白', 'password': 123,'status': False}
ret = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(ret)
# 写入文件
dic = {'username': '太白', 'password': 123,'status': False}
s_dict = json.dumps(dic)
with open('jsonlx.json',encoding='utf-8',mode='w') as f1:
    f1.write(s_dict)
with open('jsonlx.json',encoding='utf-8') as f2:
    content = f2.read()
    print(json.loads(content))
# 多个数据存储到一个文件中
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)
# dump load 单个数据的存取文件.
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)
1.2 pickle序列化
import pickle  
# dumps,loads  只能是网络传输
l1 = ['wusir', '太白', '小黑', 666]
ret = pickle.dumps(l1)  =>  直接转换成bytes
print(ret)
l2 = pickle.loads(ret)
print(l2)

# dump load 数据结构存取文件.
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)
# 多个数据写入文件
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)

2.os模块

# 目录 => 文件夹.
# 工作目录,当前目录,父级目录
import os
print(os.getcwd())   绝对路径  ***
os.chdir(r'D:\s23\day9')  改变当前脚本工作目录
print(os.curdir)  返回当前目录的字符串名 => . **
print(os.pardir)  返回当前目录的父目录字符串名 => .. **
# 与文件夹相关 
os.makedirs('dirname1/dirname2/dirname3/dirname4')  创建多级目录
os.removedirs('dirname1/dirname2/dirname3/dirname4')  截止到有文件的那层
os.mkdir(r'C:\蔡徐坤')  创建单级目录
os.rmdir('蔡徐坤')  删除单级空目录,若目录不为空则无法删除,报错
print(os.listdir(r'D:\s23\蔡徐坤'))  列出指定目录下的所有文件和子目录
# 和文件相关
os.remove()  删除一个文件  ***
os.rename("oldname","newname")  重命名文件/目录  ***
print(os.stat(r'D:\s23\day17\01 昨日内容回顾.py'))  获取文件/目录信息 **
# 与路径相关(path)  ***
print(os.path.abspath(path))   返回path的绝对路径
print(__file__)   动态获取当前文件的绝对路径
print(os.path.split(path))  将path分割成目录和文件名以一个元组返回 
print(os.path.dirname(path))  返回path的父级目录,其实就是os.path.split(path)的第一个元素  
print(os.path.basename(path))  返回path最后的文件名,即os.path.split(path)的第二个元素
print(os.path.dirname(os.path.dirname(__file__)))  返回当前文件的爷爷级的目录
print(os.path.isabs(path))  判断是否存在此绝对路径
print(os.path.isdir(path))  判断是否存在此目录(文件夹)
print(os.path.isfile(path))  判断是否存在此文件名
print(os.path.exists(path))  判断是否存在此路径(目录,文件名)
path = os.path.join(path1,path2,path3,path4)    将多个路径组合后返回
path = os.path.join(os.path.dirname(__file__),path1,path2)  动态获取路径
print(os.path.getatime(path))  返回path所指向的文件或者目录的最后访问时间  
print(os.path.getmtime(path))  返回path所指向的文件或者目录的最后修改时间  
print(os.path.getsize(path))  返回path的大小 

3.sys模块

import sys
sys.path  返回模块的搜索路径  ***
sys.exit(n)   退出程序
print(sys.version)  python版本信息

4.hashlib模块

hashlib加密
1.将一个bytes类型的数据通过hashlib进行加密返回一个等长度的16进制数字.
2.过程不可逆.
3.相同的bytes类型的数据通过相同的加密方法得到的数字绝对相同.
4.不相同的bytes类型的数据通过相同的加密方法得到的数字绝对不相同.
import hashlib
# 密码加密  md5
ret = hashlib.md5()
ret.update('123'.encode('utf-8'))
s = ret.hexdigest()
print(s)
# 撞库 => 加固定盐
ret = hashlib.md5('蔡徐坤'.encode('utf-8'))
ret.update('123456'.encode('utf-8'))
s = ret.hexdigest()
print(s)
# 加动态的盐
username = input('输入用户名:').strip()
password = input('输入密码').strip()
ret = hashlib.md5(username[::2].encode('utf-8'))
ret.update(password.encode('utf-8'))
s = ret.hexdigest()
print(s)
# sha系列(安全系数高,耗时高) =>  加盐,加动态盐
ret = hashlib.sha512()
ret.update('123'.encode('utf-8'))
s = ret.hexdigest()
print(s)
# 文件的一致性校验
low版
ret = hashlib.md5()
with open('文件校验',mode='rb') as f1:
    content = f1.read()
    ret.update(content)
print(ret.hexdigest())
ret = hashlib.md5()
with open('文件校验1',mode='rb') as f1:
    content = f1.read()
    ret.update(content)
print(ret.hexdigest())

分步update
s1 = '老男孩教育 最好的python 讲师 是 太白'
ret = hashlib.md5()
ret.update('老男孩教育'.encode('utf-8'))
ret.update(' 最好的python'.encode('utf-8'))
ret.update(' 讲师 是'.encode('utf-8'))
ret.update(' 太白'.encode('utf-8'))
print(ret.hexdigest()) 

=> 高大上版(可拓展)
def md5_file(path):
    ret = hashlib.md5()
    with open(path,mode='rb') as f1:
        while True:
            content = f1.read(1024)
            if content:
                ret.update(content)
            else:
                return ret.hexdigest()

内置模块

原文:https://www.cnblogs.com/wxl1025/p/11099944.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!