04 json
# 1. 用于多种语言 交互 编程语言通用数据 # 内置的 不需要安装直接导入使用 import json # 导入 # # dumps loads dump load # dic = {'1':'222'} # print(json.dumps(dic)) # a = json.dumps(dic) # print(type(a)) # # d = json.loads(a) # print(d,type(d)) # di = '{"1":4}' #把字典转过来 # d = json.loads(di) # print(d) # json.dump({'1':4},open('a','w',encoding='utf-8')) # # d = json.load(open('a','r',encoding='utf-8')) # d['1'] = 10 # # print(d) # json.dump({'1':4},open('a','w',encoding='utf-8')) d = json.load(open('a','r',encoding='utf-8')) print(d) # 字符串 转换成字典 # 总结 : '''''' #写入文件 load 和 dump()有持久化的功能 json.load() #参数文件句柄(r),将文件中字符串转换成字典 json.dump() #对象(字典)文件句柄(w),将 中字典转换成字符串写入文件 json.dumps() # 对象(字典) #将字典转换成字符串 json.load() #字符串(字典),将字符串转换成字典 ''''''
05pickle
#__author : 'liuyang' #date : 2019/3/19 0019 上午 10:15 # 从文件里读取 信息方便 并且可以操作 信息修改 # pickle 只支持python 传输速度快 字节传输 # dumps loads dump load # dump load 持久化 import pickle print(pickle.dumps({'1':4}))#二进制 b'x80x03}qx00Xx01x00x00x001qx01Kx04s.' print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.')) #将 一堆 类似于 二进制 的东西转化成字典 pickle.dump({'2':4},open('b','wb')) #字节 print(pickle.load(open('b','rb'))) # ''' json,pickle 对比 # loads json 里的将字符串转化成字典 pickle 字节-》字典 dumps 字典-》字符串 字典-》字节 load 文件中的字符 ---》 字典 文件中的字节-》字典 dump 字典-》字符串写入文件 字典-》字节写入文件 ''' import json #ATM机 d = {'user':'xxx','time':'2018-10-15','money':10000} a = json.load(open('a','r',encoding='utf-8')) print(d) d['money'] += 500 d['money'] -= 100 json.dump(d,open('a','w',encoding='utf-8')) print(d)
06shevle 文件+字典操作
import shelve # f = shelve.open('c',writeback=True) f = shelve.open('c') f['name'] = 'alex' print(f['name']) f['age'] = 18 print(f['name'],f['age']) f['name'] = ['alex','wusir'] print(f['name']) print(f,type(f)) #查看不了字典 地址 和 <class 'shelve.DbfilenameShelf'> for i in f: print(i) #获得所有的键 print(f[i]) print(f.keys()) #等于下面 for i in f.values(): print(i) f['name'] = {'2':4} #only 字符串 print(f['name']) for i in f: print(i,end=',') #注意 : 以后会出现一个问题,咱们对字典的操作 内容,有时写不进去 # 在 open 写的时候 写个会写 writeback = True print(f['name']) f['name'] = 'wusir' f['name'] = [1,2,3,4] print(f['name']) #{'2': 4} 没有写进 wusir print(list(f.items())) print(list(f.keys())) print(list(f.values()))
总结上面三个
# json 最常用 ,前后端分离的时候数据交互 前后端分离 必会 #pickle python 不怎么常用 必了解 # shelve 建议使用它,它简单 不用来回写 必了解
07random
# 随机数可以做 验证码 微信红包
#__author : 'liuyang' #date : 2019/3/19 0019 上午 11:21 import random #内置的 print(random.random()) # 0~1 之间的随机小数 print(random.randint(1,10)) #起始位置,终止位置,两边包含 print(random.randrange(1,21,2)) #起始位置,终止位置(不包含),步长 print(random.choice([1,2,3,4,5]),random.choice(['ev_j','taibai','alex'])) #从有序数据结构中随机选择一个 print(random.choices(['ev_j','taibai','alex'],k=2)) #随机选择两个,但是有重复 print(random.sample(['ev_j','taibai','alex'],2))#随机选择两个,没有重复的了 li = [1,2,3,4,5,6] random.shuffle(li) #洗牌 打乱顺序 print(li) # 随机数可以做 验证码 微信红包 print(chr(65),chr(90),chr(97),chr(122)) #a-z A-Z U = chr(random.randrange(65,91)) L = chr(random.randrange(97,123)) # for i in range(6): # # N = random.randrange(0,10) # print(U,L,random.randrange(0,10),random.randrange(0,10)) N1 = random.randrange(0,10) N2 = random.randrange(0,10) print(U,L,N1,N2)
08 os
#1.os 模块和当前电脑操作系统做交互 #os 内置模块 #文件夹 import os # os.makedirs('app/a/b/c')#递归建文件***以下都是 # os.removedirs('app/a/b/c')#递归删除,当这个要删除的目录有文件就停止 # os.mkdir('ap') #创建单个文件 # os.rmdir('ap') #删除单个文件 目录不是空的。:报错 print(os.listdir('D:PythonS20'))#查看某个目录下的内容 #['.idea', 'day01', 'day02', 'day04', 'day05', 'day06', 'day07', 'day07(第一次大作业)gouwuche',.... # #文件: # os.remove()# 删除这个文件,删除了就不能恢复了***** # os.rename() #修改文件的名字***** #操作系统 print(repr(os.sep)) #'\' 路径符号 print(repr(os.linesep))#' ' 换行符 print(os.pathsep) #环境变量的分割 print(repr(os.name)) # 'nt' windows #哥三 超级有用 print(os.system('dir')) #没转码 print(os.popen('dir').read()) #代码执行 cmd 的功能*** #在写程序的时候可以发一些操作系统的指令 # 2019/03/19 周二 上午 10:16 1,113 04json.py # 2019/03/19 周二 上午 10:36 1,145 05pickle.py # 2019/03/19 周二 上午 11:20 1,234 06 shelve.py # 2019/03/19 周二 上午 11:46 1,053 07 random.py # 2019/03/19 周二 下午 12:01 943 08 os.py # 在linux 系统上相当于发 shell命令 print(os.environ) # 环境变量* # 路径 os.path print(os.path.abspath('a')) #获取当前文件的绝对路径**** print(os.path.split(r'D:PythonS20day14morna')) #将这个文件的绝对路径分成目录和文件 print(os.path.basename(r'D:PythonS20day14morna'))#** # 获取的是这个文件的名字 print(os.path.dirname(r'D:PythonS20day14morna'))#*** #获取的是文件的目录 print(os.path.exists('c')) #相对路径 ** #判断这个文件是否存在 print(os.path.isabs('D:PythonS20day14morn')) #判断是否是绝对路径 # os.path.join()#路径拼接的 软件开发规规范 框架 print(os.path.join('c:\','app','a'))#***** print(os.path.getsize('b')) #和下面一样*** print(os.stat('b').st_size) #获取文件大小,坑目录F # print(os.getcwd()) #获取工作路径 print(os.chdir('D:PythonS20day14morn'))#路径切换 print(os.getcwd())
#os.makedirs os.removedirs os.mkdir('ap') os.rmdir('ap') os.listdir
#os.remove() os.rename() os.popen('dir').read() os.path.abspath('a')
#os.path.basename os.path.basename os.path.dirname os.path.exists
#os.path.isabs os.path.join os.path.getsize
https://mm.edrawsoft.cn/map.html?obj=wxoa3v5wPYw7J5YTCXUoH1ZaSi0JAw/Personal/os.emmx
9.sys
#1. sys 模块 python 解释器交互的 # sys 内置的 代码服务器 linux 运行 # 写的代码叫后端 后端写好的代码 linux系统上-后端开发 -数据库(文件)ip+端口(ip里的空间) # qq qq 之间的通信靠端口 import sys print(sys.argv[-1]) #远程访问D:/Python/S20/day14/after/09sys.py 191.168.1.1 8080 #接受cmd 方式调用 后面的参数会传递过来 *** # sys.path ****** # 自定义模块 添加到这个模块中 print(sys.path) #访问模块的时候 #['D:\Python\S20\day14\after', 'D:\Python\S20\day04', 'D:\Python\S20', print(sys.version) #版本获取 解释好的版本号#3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] print(sys.platform) #win32 #获取当前操作系统的平台位数 print(sys.exit(1)) #正常退出时0 异常是1
10.hashilib
1.加密算法 作用:当做密码 #判断 一致性 # 明文: liuyang #密文:asjdfajldjafadflkadf 或者 ************* # 2.加密后不可逆 不能解 # 没有提示 世界上最难(金字塔)的都被中国人一年退了 没有绝对的安全 # (md5 反推)现在已经不安全了 被人反推了 # 3.sha1 ,sha256 ,sha512 import hashlib md5 = hashlib.md5('盐'.encode('utf-8')) #选择加密方式 加盐 md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密 print(md5.hexdigest())#生成密文:#6b649039a388694c7306cb4d14041a14 # 一些无聊的黑客把简单的(12345678) 哈希密文 都存到数据库上 去撞 遍历 # 一年前暴力破解 叫做撞库 md5 = hashlib.md5() #选择加密方式 加盐 (实例化一个对象) md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密 print('没加盐',md5.hexdigest())#生 sha1 = hashlib.sha1() sha1.update('liuyang'.encode('utf-8')) print(sha1.hexdigest()) sha512 = hashlib.sha512() sha512.update('liuyang'.encode('utf-8')) print(sha512.hexdigest()) print(len(sha512.hexdigest())) a = 'dfca38e23cf278c6ce60f919aa4b1f89da1622efd25bd5f8a55b7b3cfb12d6b3042059894f82d5186118c8e63d8a74da37c0ed841eb8aeee7e2977b33fa84c5a' print(len(a))# 128位 # 优点 : 安全 缺点 :慢 # md5 优点:安全 快 缺点:易破解 user , pwd = input('user|pwd:').strip().split('|') import hashlib md5 = hashlib.md5(str(user).encode('utf-8')) md5.update(pwd.encode('utf-8')) print(md5.hexdigest()) #liuyang|liuyang333 # 因为有一些人都用相同的密码但是不会用相同的用户名 # eac5796d45d8525d6d23c341730e87ab #判断一致性
import hashlib md5 = hashlib.md5() #选择加密方式 加盐 (实例化一个对象) md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密 print('没加盐',md5.hexdigest())#生