序列化,os,sys,hashlib,collections
序列化,os,sys,hashlib,collections
1.序列化
什么是序列化?序列化的本质就是将一种数据结构(如字典,列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化.
json
1.不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串。(比如Python的一个列表[1, 2, 3]利用json转化成特殊的字符串,然后在编码成bytes发送给php的开发者,php的开发者就可以解码成特殊的字符串,然后在反解成原数组(列表): [1, 2, 3])
2.json序列化只支持部分Python数据结构:dict,list, tuple,str,int, float,True,False,None
import json
两组四个方法:
1.dumps loads
dumps:将对象转换(序列化)成字符串
loads:将字符串转换(反序列化)成对象
lst = [1,2,3,4,5]
str_lst = json.dumps(lst) #序列化
print(str_lst)
l_lst = json.loads(str_lst) #反序列化
print(l_lst)
dic = {'k1':1,'k2':2}
str_dic = json.dumps(dic) #序列化
print(str_dic)
d_dic = json.loads(str_dic) #反序列化
print(d_dic)
2.dump load
dump:将对象转换(序列化)成字符串,写入文件
load:将文件中字符串转换(反序列化)成对象
lst = [1,2,3,4,5]
f = open("test","a",encoding = "utf-8")
json.dump(lst,f)
f.close()
f1 = open("test","r",encoding = "utf-8")
s = json.load(f1)
print(s,s[-1])
f1.close()
#同时写多个内容,进行序列化
lst = [1,2,3,4,5]
f = open("test","w",encoding = "utf-8")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.close()
#同时读多个内容进行反序列化
f1 = open("test","r",encoding = "utf-8")
for i in f1:
s = json.loads(i)
print(s)
f1.close()
pickle
1.只能是Python语言遵循的一种数据转化格式,只能在python语言中使用。
2.支持Python所有的数据类型包括实例化对象。
import pickle
两组4个方法:
1.dumps loads
lst = [1,2,3,4,5]
t_lst = pickle.dumps(lst) #转换成类似字节
print(t_lst)
print(pickle.loads(t_lst)[-1]) # 5
dic = {"k1":1,"k2":2}
t_dic = pickle.dumps(dic) #转换成类似字节
print(t_dic)
print(pickle.loads(t_dic)) #dic = {"k1":1,"k2":2}
def func():
print(111)
fun = pickle.dumps(func)
pickle.loads(fun)() # 111
2.dump load
dic = {"k1":1,"k2":2}
pickle.dump(dic,open("test","wb")) #在文件中写成类似字节
print(pickle,load(open("test","rb"))) #打印原内容
#同时写多个内容
dic = {"k1":1,"k2":2}
f = open("test","wb")
s = "\n".encode("utf-8")
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.close()
#同时读多个内容
f1 = open("test","rb")
for i in f1:
print(pickle.loads(i))
2.os
os模块:程序员通过python向操作系统发送指令(与操作系统交互的接口)
os模块四组:
import os
1.工作目录
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir('F:\s24') 改变当前脚本工作目录,切换路径
os.curdir 返回当前目录
os.pardir 获取当前目录的父目录字符串名
2.文件夹
os.mkdir('test') 生成单级目录,即创建一个名为'test'的文件夹
os.rmdir('test') 删除单级空目录,即删除'test'文件夹,目录不为空则无法删除,报错
os.makedirs('test/ttt/sss') 递归创建文件夹
os.removedirs('test/ttt/sss') 递归删除文件夹
os.listdir(r'D:\S24') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
3.文件
os.remove() 删除一个文件,无法找回
os.rename("oldname","newname") 重命名文件/目录
os.stat("C:\学习\代码练习") 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
4.路径
os.path.abspath(r"test.py") 通过相对路径获取绝对路径
os.path.split(os.path.abspath(r"test.py")) 将文件路径以最后一个\切割,分割成目录和文件名二元组返回
os.path.dirname(r"C:\学习\代码练习\test.py") 获取目录(路径)
os.path.basename(r"C:\学习\代码练习\test.py") 获取文件名
os.path.exists(r"C:\学习\代码练习\test.py") 判断这个文件路径是否存在
os.path.iddir(r"C:\学习\代码练习") 判断是不是路径
os.path.isfile(r"test.py") 判断是不是文件
os.path.isabs(r"C:\学习\代码练习\test.py") 判断是不是绝对路径
os.path.join("D:\","学习","代码练习") 路径拼接
os.path.getatime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后修改时间
os.path.getmtime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后访问时间
os.path.getctime(r"C:\学习\代码练习\test.py") 返回所指向的文件或者目录的最后访问时间
os.path.getsize(r"C:\学习\代码练习\test.py") 获取当前文件的大小
3.sys
sys模块是与python解释器交互的一个接口
sys.argv 命令行参数List,第一个元素是程序本身路 径当作脚本执行,能够携带参数
sys.exit(n) 退出程序,正常退出时exit(0),错误退出 sys.exit(1)
sys.version 获取Python解释器的版本信息
sys.path 添加自定义模块查找路径
sys.platform 区分操作系统然后进行相关逻辑操作
4.hashlib
hashlib模块也叫摘要算法或者加密算法,哈希算法,散列算法等等,一般的加密方法有MD5,sha1,sha256,sha512...
作用:加密和校验使用
工作原理:通过一个函数,把任意长度的数据按照一定规则转换为一个固定长度的数据串(通常用16进制的字符串表示)
hashlib的使用:
bytes类型数据 ---> 通过hashlib算法 ---> 固定长度的字符串
特征:
1..只要明文相同密文就是相同的.
2.只要明文不相同密文就是不相同的.
3.此转化过程不可逆(不能解密).
例:
alex:alex123
import hashlib
s = hashlib.md5()
s.update("alex123".encode("utf-8"))
print(s.hexdigest())
alex:b75bd008d5fecb1f50cf026532e8ae67(#加密后)
加密:
1.加密的内容
2.将要加密的内容转成字节
最常用的就是MD5,平时加密的时候使用sha1
加盐
加固定盐:
import hashlib
md5 = hashlib.md5("hello".encode("utf-8"))
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
动态加盐:
user = input("username:")
pwd = input("password:")
import hashlib
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())
文件校验:
我们自己如何验证我们下载的资源是否有病毒呢?这就需要文件的一致性校验了。在我们下载一个软件时,往往都带有一个MD5或者shax值,当我们下载完成这个应用程序时你要是对比大小根本看不出什么问题,你应该对比他们的md5值,如果两个md5值相同,就证明这个应用程序是安全的,如果你下载的这个文件的MD5值与服务端给你提供的不同,那么就证明你这个应用程序肯定是植入病毒了(文件损坏的几率很低),那么你就应该赶紧删除,不应该安装此应用程序。
例:
我们在安装python解释器的时候,在安装python解释器的时候计算本地的md5值是否一致,一致安装,不一致的删除.获取到python3.6.6的MD5值为:767db14ed07b245e24e10785f9d28e29
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest())
#校验输出的MD5值是否与官方给到的MD5值相同
节省(相对)内存的校验方法:
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
while True:
msg = f.read(1024)
if msg:
md5.update(msg)
else:
print(md5.hexdigest())
break
#二者结果相同
ss = "baoyuanalextaibai"
import hashlib
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest())
s = "baoyuan"
s1 = "alex"
s2 = "taibai"
import hashlib
md5 = hashlib.md5()
md5.update(s.encode("utf-8"))
md5.update(s1.encode("utf-8"))
md5.update(s2.encode("utf-8"))
print(md5.hexdigest())
5.collections
1.namedtuple:命名元组,生成可以使用名字来访问元素内容的tuple
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p) #Point(x=1, y=2)
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
是为了高效实现插入和删除操作的双向列表,适用于队列和栈
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q)
# deque(['y', 'a', 'b', 'c', 'x'])
#支持pop(),popleft(),append(),appendleft()和索引
3.Counter: 计数器,主要用来计数
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
#Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
4.OrderedDict: 有序字典
#python3.6以上版本字典是有序的
5.defaultdict: 带有默认值的字典
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
li = [11,22,33,44,55,77,88,99,90]
result = {}
for row in li:
if row > 66:
if 'key1' not in result:
result['key1'] = []
result['key1'].append(row)
else:
if 'key2' not in result:
result['key2'] = []
result['key2'].append(row)
print(result)
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
序列化,os,sys,hashlib,collections的更多相关文章
- oldboy edu python full stack s22 day16 模块 random time datetime os sys hashlib collections
今日内容笔记和代码: https://github.com/libo-sober/LearnPython/tree/master/day13 昨日内容回顾 自定义模块 模块的两种执行方式 __name ...
- 内置模块:time, datetime, random, json, pickle, os, sys, hashlib, collections, re
1.time模块 import time time.time() # 时间戳 浮点数 time.sleep() # 睡眠 time.gmtime()/time.localtime() #结构化时间 数 ...
- 模块之 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 ...
- python基础之 序列化,os,sys,random,hashlib
1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...
- 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开始按秒计算的偏移量.我们运 ...
- Day14 Python基础之os/sys/hashlib模块(十二)
os模块 os.getcwd() #获取当前工作路径 os.chdir(‘dirname1/dirname2/dirname3’) #改变当前脚本的工作路径,相当于cmd下的cd os.makedi ...
- time,datetime,random,os,sys,hashlib,logging,configparser,re模块
#-----time模块----- print(help(time)) #打印time帮助文档 print(time.time()) #打印时间戳 1569824501.6265268 time.sl ...
- python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块
time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...
随机推荐
- Beyond Compare4激活码(版本 4.2.8)
w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv 1BM3+H1XygMtiE0-JBgacjE9tz33sIh542EmsGs1yg ...
- JavaWeb_(Mybatis框架)动态sql_七
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- CF1208D
CF1208D 题意: 给你一个数组,要求支持单点修改和单点查询 解法: 直接线段树搞一搞就没了. CODE: #include<iostream> #include<cstdio& ...
- 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》
2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...
- 使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性
使用sequelize-auto 生成mysql 表时主键没有 autoIncrement: true 属性,这会导致插入数据时报错.看git上面是已经解决了的,解决方法是修改查询语句模板.我用的是0 ...
- 有效管理进程的几个linux命令
一般来说,应用程序进程的生命周期有三种主要状态:启动.运行和停止.如果我们想成为称职的管理员,每个状态都可以而且应该得到认真的管理.这八个命令可用于管理进程的整个生命周期. 启动进程 启动进程的最简单 ...
- web前端——Vue.js基础学习
近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...
- Vue插件编写、用法详解(附demo)
Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...
- Eclipse部署时项目中依赖的jar包不能部署到服务器WEB-IN下lib目录
转: Eclipse部署时项目lib下jar包不能部署到服务器WEB-IN下lib目录及Eclipse下tomcat服务器配置修改 2018年04月07日 11:04:19 拾悦酒吧 阅读数 1046 ...
- QString std::string 相互转 含中文
std::string cstr;QString qstring; //QString str1 = " D:\\参考手册\\BIM\\osg\\build1.OSGB"; //从 ...