day17——序列化、os、sys、hashlib、collections
day17
序列化
json
两组4个方法:
1、dumps(序列化) —— loads(反序列)
dumps(list):将对象转换成字符串
loads(str):将字符串转换成对象
- list——str——list
- tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
- dict——str——dict
- set不可序列化
lit = [1,22,3,3,45]
print(json.dumps(lit),type(json.dumps(lit)))
str_lst = json.dumps(lit)
lst = json.loads(str_lst)
print(lst,type(lst))
dic = {'username':'宝元'}
# str_dic = json.dumps(dic) # 序列化
str_dic = json.dumps(dic,ensure_ascii=False) # ensure_ascii=False 关闭ascii码
print(str_dic,type(str_dic))
dic1 = json.loads(str_dic) # 反序列化
print(dic1,type(dic1))
2、dump —— load
dump(list,文件名):将对象转换成字符串写入文件
load(文件名):将文件中字符串转换成对象读出文件
- list——str——list
- tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
- dict——str——dict
- set不可序列化
import json
dic = (1,2,3,4,5)
with open("infoo","a",encoding="utf-8")as f:
json.dump(dic, f)
with open("infoo","r",encoding="utf-8")as f1:
lst1 = json.load(f1)
print(lst1,type(lst1))
# 同时写多个内容 进行序列化
lst = [1,2,3,4,56,]
f = open("info","w",encoding="utf-8")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.write(json.dumps(lst) + "\n")
f.close()
# 同时读多个内容进行反序列
f1 = open("info","r",encoding="utf-8")
for i in f1:
l = json.loads(i)
print(l)
f1.close()
pickle
pickle——nb(python所有对象进行转换)
python自带的(只有python可以用)
两组4个方法
1、dumps —— loads
dumps:转换成类似字节的东西
loads:转回来
import pickle
lst = [12,3,4,5,768]
t_list = pickle.dumps(lst) # 转换成类似字节
print(t_list)
print(pickle.loads(t_list))
dic = {"user":"郭宝元"}
t_list = pickle.dumps(dic) # 转换成类似字节
print(t_list)
print(pickle.loads(t_list))
import pickle
def func():
print(111)
fun = pickle.dumps(func)
print(fun)
pickle.loads(fun)()
2、dump —— load
dump:转换成类似字节的东西写入文件
load:转回来读出文件
import pickle
dic = {"usern":"baoyuian"}
# dic = {"usern":"宝元"}
pickle.dump(dic,open("info","wb"))
print(pickle.load(open("info","rb")))
import pickle
dic = {"1":2}
f = open("info","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("info","rb")
for i in f1:
print(pickle.loads(i))
推荐使用json
json是各种语言通用的
pickle(python私有)
os模块
os模块——程序员通过python向操作系统发送指令(与操作系统交互的接口)
1、工作目录
import os
# print(os.getcwd()) # 查看当前工作路径 ***
# os.chdir("D:\python 笔记\day09") # 路径切换
# print(os.curdir) # 当前(.)
# print(os.pardir) # 父级(..)
2、文件夹
import os
os.mkdir("ttt") # 创建一个文件夹 ***
os.rmdir("ttt") # 删除一个文件夹 ***
os.makedirs("ttt/sss/ddd/ee") # 递归创建文件夹 ***
os.removedirs("ttt/sss/ddd/ee") # 递归删除文件夹 ***
print(os.listdir(r"D:\python 笔记\day17")) # 把整个文件夹里面的文件以列表显示 ***
3、文件
import os
os.rename("info","infoo") # 重命名文件/目录 ***
os.remove() # 删除一个文件 ***
4、路径
import os
# print(os.path.abspath("infoo")) # 通过相对路径获取绝对路径 ***
# print(os.path.split(os.path.abspath("infoo"))) # 将路径以最后一个\切割,结果(路径,文件名)
# print(os.path.dirname(r"D:\python 笔记\day17\__init__.py")) # 获取路径,结果(D:\python 笔记\day17) ***
# print(os.path.exists(r"D:\python 笔记\day17\__init__.py")) # 判断这个路径是否存在 ***
# print(os.path.isdir(r"D:\python 笔记\day17")) # 判断是不是路径 ***
# print(os.path.isfile("__init__.py")) # 判断是不是文件 ***
# print(os.path.isabs("D:\python 笔记\day17\__init__.py")) # 判断是不是绝对路径
# print(os.path.join("D:\\\\","ttt","bbb")) # 路径拼接 ****
# import time
# print(time.time())
# print(os.path.getatime(r"F:\s24\day17\04 序列化.py")) # 最后的修改时间
# print(os.path.getctime(r"F:\s24\day17\04 序列化.py")) # 最后的访问时间
# print(os.path.getmtime(r"F:\s24\day17\04 序列化.py")) # 最后的访问时间
# print(os.path.getsize(r"F:\s24\day09")) # 获取当前文件的大小 ***
sys模块
sys——与python解释器交互的接口
import sys
# import sys
# if sys.argv[-1] == "alex":
# print("dsb")
# else:
# print("李业dsb")
# print(sys.argv) # *** 当前文件运行,结果:['D:/python 笔记/day17/sys模块.py']
# print(exit(0或1)) # 退出程序,正常退出时exit(0),错误退出sys.exit(1)
# print(sys.path) # 添加自定义模块查找路径 ******
# print(sys.platform) # 区分操作系统然后进行相关逻辑操作 ***
hashlib加密
加密和校验
md5算法(安全系数最低)、sha1、sha256、sha512
最常用的是md5,平时加密的时候使用sha1
加密:
加密的内容
将要加密的内容转成字节
- 只要明文相同密文就是相同的
- 只要明文不相同密文就是不相同的
- 不能反逆(不能解密)——md5中国人破解了
import hashlib
md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
md5 = hashlib.md5()
md5.update("alex123".encode("gbk"))
print(md5.hexdigest())
md5 = hashlib.sha1()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
md5 = hashlib.sha256()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
加盐
固定加盐
import hashlib
md5 = hashlib.md5("常鑫".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())
校验
ss = "baoyuanalextaibai"
import hashlib
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest())
# 9b674a2402eb25b1ccd2106868bd1ee9
import hashlib # 节省内存
s1 = "baoyuan"
s2 = "alex"
s3 = "taibai"
md5 = hashlib.md5()
md5.update(s1.encode("utf-8"))
md5.update(s2.encode("utf-8"))
md5.update(s3.encode("utf-8"))
print(md5.hexdigest())
# 9b674a2402eb25b1ccd2106868bd1ee9
# 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())
# 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
collections
**Counter():计数器,主要用来计数 *******************
from collections import Counter
# s = [1,1,2,2,3,3]
# s = (1,2,3,3,4,5,6,7,78)
s = "1112233344aaa"
print(dict(Counter(s))) # ***
# 结果是 {'1': 3, '2': 2, '3': 3, '4': 2, 'a': 3}
# 统计元素出现的次数
namedtuple():命名元组,生成可以使用名字来访问元素内容的tuple
from collections import namedtuple,deque
Point = namedtuple('tu',["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
p = Point({"keu":(1,2,3,4)}, 20,10)
print(p)
# 结果是:tu("a"="keu":(1,2,3,4)},"b"=20,"c"=10)
deque():双端队列,可以快速的从另外一侧追加和推出对象
# lst = deque([1,2,3,4,5,6,7]) # 先进先出
# lst.append(8) # 在最后追加
# lst.appendleft(0) # 在最前加
# lst.pop() # 删除最后的
# lst.popleft() #删除最前的
# print(lst[4]) # 还可以使用索引
OrderedDict():有序字典
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']
defaultdict():带有默认值的字典
# from collections import defaultdict
# dic = defaultdict(list)
# dic["k1"].append(12)
# print(dic)
# li = [11,22,33,44,55,77,88,99,90]
# result = {"key1":[],"key2":[]}
# 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
# dic = defaultdict(set)
# li = [11,22,33,44,55,77,88,99,90]
# for i in li:
# if i > 66:
# dic["k1"].add(i)
# else:
# dic["k2"].add(i)
# print(dic)
day17——序列化、os、sys、hashlib、collections的更多相关文章
- 序列化,os,sys,hashlib,collections
序列化,os,sys,hashlib,collections 1.序列化 什么是序列化?序列化的本质就是将一种数据结构(如字典,列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化. ...
- 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 ...
随机推荐
- 套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构/新通用套接字地址结构
IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t ...
- return、reutrn false、e.preventDefault、e.stopPropagation、e.stopImmediatePropagation的区别
return var i = function(){ return } console.log(i())//undefined return的主要作用是阻止函数继续执行,直接返回undefined r ...
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!
转:https://mp.weixin.qq.com/s/CEJFsDBizdl0SvugGX7UmQ 不知道从什么时候开始,网上流传着这么一个说法: MySQL的WHERE子句中包含 IS NULL ...
- 出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法
一.原因及解决方法[1] 1.原因:堆内存的永久保存去区内存分配不足(缺省默认为64M),导致内存溢出错误. 2.解决方法:重新分配内存大小,-Xms1024M -Xmx2048M -XX:PermS ...
- Windows 文件过滤驱动经验总结
Windows 文件过滤驱动经验总结作者:sinister 本文转载自驱动开发网 看了 ChuKuangRen 的第二版<文件过滤驱动开发教程>后,颇有感触.我想,交流都是建立在平等的基础 ...
- 冰多多团队Beta阶段发布说明
Bingduoduo 语音Coding(Beta):项目Github地址 Beta版本新功能介绍 在beta阶段我们很好地将alpha阶段已经设计好的编辑器和shell整合了起来,推出了一个完整的ID ...
- 自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述
自顶向下深入分析Netty(七)--ChannelPipeline和ChannelHandler总述 自顶向下深入分析Netty(七)--ChannelPipeline源码实现 自顶向下深入分析Net ...
- oracle通过dblink连接mysql配置详解(全Windows下)
关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...
- What is the difference between UNION and UNION ALL?
What is the difference between UNION and UNION ALL? UNION removes duplicate records (where all colum ...
- Spring的注解收集
@Scope("prototype")spring 默认scope 是单例模式scope="prototype" 可以保证 当有请求的时候 都创建一个Actio ...