序列化,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 ...
随机推荐
- Exception in thread "main" java.util.ConcurrentModificationException解决方案
我想判断一个集合里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素, 当时的做法是: public class ListIterator ...
- 运维自动化之ansible
Ansible简介 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无宕机 ...
- Thymeleaf th:include、th:replace引用
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" ...
- poj1734
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9078 Accepted: 3380 ...
- OpenStack v.s. Kubernetes
目录 文章目录 目录 What are the differences with OpenStack and Kubernetes? Why OpenStack & Kubernetes? W ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发
在Service中实现自定义查询 StringUtils.isNotEmpty()是这个包下的org.apache.commons.lang3.StringUtils; 再设置其他的条件 定义Exam ...
- php 转化整型需要注意的地方
public function tt(){ $num = '19.90'; echo $num; echo '<br/>--------------<br/>'; echo 1 ...
- Spark On YARN启动流程源码分析(一)
本文主要参考: a. https://www.cnblogs.com/yy3b2007com/p/10934090.html 0. 说明 a. 关于spark源码会不定期的更新与补充 b. 对于spa ...
- Nginx使用默认配置启动异常处理
Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...
- C#中设置自定义控件工具箱图标
在设计自定义控件时,系统默认生成的图标比较单一难看,如何为控件设计自己的图标呢,这里给出了一种基于ToolBoxBitmap 属性设置自定义控件工具箱图标的方法. 1)首先将图标文件名改为自定义控件名 ...