python之序列化、OS、SYS、hashlib模块
一、序列化模块
1.序列化模块的用途
将一种数据结构转换成特殊的序列(特殊字符串,bytes),并且还可以转换回去
凡是数据通过网络传出去最终的格式必须bytes
2.json模块
json 是一种轻量级的数据交换格式
用途: 所有编程语言公认的一种序列
缺点: 支持的python的数据结构有限,只支持: int str bool dict list tuple None 除了(set())和对象
用法一 (两对儿,四个方法)
dumps,loads # 用于网络传输 #原则一对一,一个dumps对应一个loads
# 转换传输
dic = {'username':'太白'}
ret = json.dumps(dic,ensure_ascill=False,sort_keys=True)
print(ret)
# 反转回来
ret_dict = json.loads(ret)
print(ret_dict)
将转换后的特殊字符串写入文件,再从文件中读取出来,再反转回来
import json
dic = {'username': '太白', 'password': 123,'status': False}
with open('register.json',mode='w',encoding='utf-8') as f1:
	ret = json.dumps(dic, ensure_ascii=False)
	f1.write(ret+'\n')
with open('register.json',mode='r',encoding='utf-8') as f2:
	for line in f2:
		ret_dic = json.loads(line)
		print(ret_dic)
# 该题练习主题是: 先将转换写入文件,再从文件中读取出来,反转回来
# register.json内容
{"username": "太白", "password": 123, "status": false}
# 输出结果
{'username': '太白', 'password': 123, 'status': False}
用法二
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))
将多个数据存储到一个文件中
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)
3. pickle模块
用途: 支持python的所有类型和数据对象
缺点: 只能python使用
用法一 (两对儿,四个方法)
dumps,loads # 只能是网络传输用,直接转换成bytes
# 转换传输
l1 = ['wusir', '太白', '小黑', 666]
ret = pickle.dumps(l1)
print(ret)
# 反转回来
l2 = pickle.loads(ret)
print(l2)
用法二
dump,load # 用于单个数据的存取文件,只能用于单个字典,用法很狭窄
l1 = ['wusir', '太白', '小黑', 666]
with open('a.pickle',mode='wb') as f1:
	pickle.dump(l1,f1)
shevle模块(不讲)
用途: 只能是文件存取,shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些
用法
import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据
f.close()
import shelve
f1 = shelve.open('shelve_file')
existing = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing)
二、sys模块
用法
import sys
sys.path ***
sys.version
sys.argv
for i in range(3)
	print(i)
sys.exit(n) # 强制退出
三、OS模块
用法
import os
print(os.getcwd()) # 获取当前的绝对路径
os.chdir(r'/Users/wuqiang/work/PycharmProjects/python23') # 切换目录 相对于shell下cd
print(os.curdir) # 返回当前路径
# 和文件相关
os.makedirs('目录1/目录2')
os.makedirs('dirname1/dirname2/dirname4') #创建多级目录
os.removedirs('dirname1/dirname2/dirname4') #递归删除多级目录
os.mkdir('abc') #创建单级目录
os.rmdir('abc') #删除单级目录
print(os.listdir('/Users/wuqiang/work/PycharmProjects/python23')) #查看目录下文件类似ls
print(os.stat('/Users/wuqiang/work/PycharmProjects/python23')) #获取状态,文件信息
print(os.environ) #获取环境变量
# 路径相关
print(os.path.abspath('day17.py')) # 获取绝对路径
print(os.path.split(os.path.abspath('day17.py'))) #将文件路径和文件名分割
print(os.paty.dirnaem('day17.py'))
print(__file__) #动态获取当前文件的绝对路径
print(os.path.dirname(os.path.dirname(__file__))) #获取爷爷级目录
print(os.path.basename('day17.py')) #获取文件名
print(os.path.exists('day17.py')) # 判断文件是否存在
print(os.path.isabs('/Users/wuqiang/work/PycharmProjects/python23/day17')) #判断是不是绝对路径
print(os.path.isfile('/Users/wuqiang/work/PycharmProjects/python23/day17')) #判断是不是存在的文件
print(os.path.isdir('day17.py')) #判断是否是一个目录
print(os.path.exists('day17.py')) #判断这个路径或文件是否存在
print(os.path.join('/Users/wuqiang/work/PycharmProjects/python23/day17','day17.py'))#将路径和文件拼接在一起
print(os.path.getatime('/Users/wuqiang/work/PycharmProjects/python23/day17'))#最后访问时间
print(os.path.getmtime('/Users/wuqiang/work/PycharmProjects/python23/day17'))#最后修改时间
print(os.path.getsize('/Users/wuqiang/work/PycharmProjects/python23/day17')) #文件的大小
文件的拼接
print(os.path.join('/user/local/','filename.txt'))
# 输出结果
/user/local/filename.txt
四、hashlib (加密)
用途: 加密模块,摘要算法,散列算法,它是一堆加密算法的集合
- 密码加密
- 文件的一致性校验
hashlib如何加密:
- 将一个bytes类型的数据,通过hashlib进行加密返回一个等长度的16进制数字
- 过程不可逆
- 相同的bytes类型的数据通过相同的加密码方法得到的数字绝对相同
- 不相同的bytes类型的数据通过相同的加密方法得到的数字绝对不相同
密码加密用法:
ret = hashlib.mkd5()
ret.update('123'.encode('utf-8'))
print(ret.hexdigest())
# 输出结果
202cb962ac59075b964b07152d234b70
文件一致性校验:
def encryption(path):
	import hashlib
	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()
a = encryption('/Users/wuqiang/Downloads/python-3.7.4rc1-embed-win32.zip')
print(a)
#输出结果
加固定盐
ret = hashlib.md5('xxx教育'.encode('utf-8'))
ret.update('123'.encode('utf-8'))
s = ret.hexdigest()
print(s,type(s))
#输出结果
2230499227e2134dc58609d8c8997cd9 <class 'str'>
加动态的盐
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('123456fdklsajflsdfjsdlkafjafkl'.encode('utf-8'))
s = ret.hexdigest()
print(s,type(s))
python之序列化、OS、SYS、hashlib模块的更多相关文章
- Day14  Python基础之os/sys/hashlib模块(十二)
		os模块 os.getcwd() #获取当前工作路径 os.chdir(‘dirname1/dirname2/dirname3’) #改变当前脚本的工作路径,相当于cmd下的cd os.makedi ... 
- 序列化,os,sys,hashlib,collections
		序列化,os,sys,hashlib,collections 1.序列化 什么是序列化?序列化的本质就是将一种数据结构(如字典,列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化. ... 
- python基础  (序列化,os,sys,random,hashlib)
		1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ... 
- python基础语法11   内置模块time,datatime,random,os,sys,hashlib模块
		time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ... 
- oldboy edu python full stack s22 day16 模块 random time datetime os sys hashlib collections
		今日内容笔记和代码: https://github.com/libo-sober/LearnPython/tree/master/day13 昨日内容回顾 自定义模块 模块的两种执行方式 __name ... 
- python基础之 序列化,os,sys,random,hashlib
		1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ... 
- Python常用模块(time, datetime, random, os, sys, hashlib)
		time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ... 
- 模块之 time datetime random json pickle os sys hashlib collections
		目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ... 
- time,datetime,random,os,sys,hashlib,logging,configparser,re模块
		#-----time模块----- print(help(time)) #打印time帮助文档 print(time.time()) #打印时间戳 1569824501.6265268 time.sl ... 
- CSIC_716_20191116【常用模块的用法 time ,datetime, random, os, sys, hashlib】
		import time import datetime import os import sys import random import hashlib time模块 时间戳(Timestamp) ... 
随机推荐
- 利用python代码操作git
			python操作git 安装模块 pip3 install gitpython 基本使用 import os from git.repo import Repo # 创建本地路径用来存放远程仓库下载的 ... 
- C++扬帆远航——16(猜数字)
			/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:guessnum.cpp * 作者:常轩 * 微信公众号:Wor ... 
- py基础之模块与包
			'''模块:当代码越来越多时,将所有代码放入一个文件中便会无法维护,所以放到多个文件中去,这样每一个py文件就是一个模块 包:模块越来越多时容易重名,便将模块放入不同的包中,每个包中必须有一个__in ... 
- Web前端经典面试试题(二)
			上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ... 
- JS基础入门篇(三十五)—面向对象(二)
			如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一) 
- FCC 成都社区·前端周刊 第 4 期
			01. Angular, React or Vue? 如何为下一个 Web 应用程序选择合适的JavaScript 框架?Progress 的新白皮书提供了对 Angular.React 和 Vue ... 
- PySide2的This application failed to start because no Qt platform plugin could be initialized解决方式
			解决PySide2的This application failed to start because no Qt platform plugin could be initialized问题 今天在装 ... 
- koa进阶史(二)
			之前想着放弃CAS的验证吧,但是又去请教了一个大牛,了解到sf公司的CAS验证校验的参数不是sessionId而是另外两个,后登陆sit环境偷了两个参数后,后台接口成功返回200.然后node层也就能 ... 
- vue项目npm run dev 报错Uncaught SyntaxError: Unexpected token <
			目前代码所处位置是micro分支,该分支是从dev分支直接拉下来进行npm run dev的,而dev分支是可以正常运行的,网上的诸多解释是babel转义时候报错,其实对比可见,两个分支不同的地方应该 ... 
- Nginx之负载均衡配置(二)
			前文我们聊到了nginx作为负载均衡的配置,前端nginx作为调度器调度http或https请求,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12458159 ... 
