1.序列化
1.json
文件: 写 json.dump(对象,文件) mode = "a" 读 json.load(文件) mode = "r"
字符串:dump(对象):将对象序列化成字符串 loads(字符串):将字符串序列化成对象
import json
l = [1,2,3,7,5]
print(json.dumps(l),type(json.dumps(l)))#[1, 2, 3, 7, 5] <class 'str'>
s = json.dumps(l)
print(json.loads(s),type(json.loads(s)))#[1, 2, 3, 7, 5] <class 'list'>
读写文件
import json
l = [1,2,3,4,8]
f = open("info",mode="a",encoding="utf-8")
json.dump(l,f)
f.close()
f = open("info",mode="r",encoding="utf-8")
print(json.load(f))
字典
字典中有中文时,想读出中文需加ensure_ascii=False
dic = {"h":3,"姓名":"oooo"}
f = open("info1","a",encoding="utf-8")
json.dump(dic,f,ensure_ascii=False)
f = open("info1","r",encoding="utf-8")
print(json.load(f))
读写多个文件
f = open("info","a",encoding="utf-8")
str1 = json.dumps(l1,ensure_ascii=False)
f.write(str1+"\n")
str2 = json.dumps(l2,ensure_ascii=False)
f.write(str2+"\n")
str3 = json.dumps(l3,ensure_ascii=False)
f.write(str3+"\n")
f.close()
f = open("info","r",encoding="utf-8")
for i in f:
print(json.loads((i)))
2.pickle
dumps:将对象转化为bytes类型,类似于字节
pickle.dumps(对象) 返回类似于字节
loads将bytes序列化为对象
pick.loads(字节)
文件:dump 写 wb
loadds 读 rb
import pickle
s = pickle.dumps(l1)
l2 = pickle.loads(s)
print(l2)
f = open("info","wb")
pickle.dump(l1,f)
f.close()
写多个
l1 = [1,2,2,3,6,5,777,"宝元a"]
l2 = [1,2,3,6,5,"搜索你家"]
l3 = [1,9,3,6,5,]
import pickle
f = open("info","wb")
pickle.dump(l1,f)
pickle.dump(l2,f)
pickle.dump(l3,f)
f.close()
读多个
f = open("info","rb")
print(pickle.load(f))
2. o s模块
os模块是与操作系统交互的一个接口
1.工作目录
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 ****
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
2.文件夹相关
os.makedirs('dirname1/dirname2') 可生成多层递归目录 ***
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 ***
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname ***
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname ***
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 **
3.文件相关
os.remove() 删除一个文件 ***
os.rename("oldname","newname") 重命名文件/目录 ***
os.stat('path/filename') 获取文件/目录信息 **
4.路径相关
os.path.abspath(path) 返回path规范化的绝对路径 ***
os.path.split(path) 将path分割成目录和文件名二元组返回 ***
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 **
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 **
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False ***
os.path.isabs(path) 如果path是绝对路径,返回True **
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False ***
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False ***
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 ***
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 **
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 **
os.path.getsize(path) 返回path的大小 ***
3. sys
sys -- 与python解释器交互的接口
import sys
if sys.argv[-1] == "alex":
print("dsb")
else:
print("李业dsb")
print(sys.argv[-1]) # *** 当前文件运行['F:/s24/day17/06 sys.py']
import sys
print(sys.exit(1)) #
import sys
print(sys.version) # 获取解释器版本
import sys
print(sys.path) # 添加自定义模块查找路径 *****
import sys
print(sys.platform) # *** 区分操作系统然后进行相关逻辑操作
4. h a s h l i b
加密方式 md5,sha1,sha256,sha512
1.只要明文相同密文就是相同的
2.只要明文不相同密文就是不相同的
3.不能反逆(不能解密)
最常用是的md5,平时加密的时候使用sha1
加密 md5
import hashlib
md5 = hashlib.md5()
md5.update("alex".encode("utf-8"))
print(md5.hexdigest())
固定加盐
import hashlib
md5 = hashlib.md5("uuu".encode("utf-8"))
md5.update("alex".encode("utf-8"))
print(md5.hexdigest())
动态加盐(安全性能提高)
import hashlib
uername = input("账号")
password = input("密码")
ret = hashlib.md5(uername.encode("utf-8"))
ret.update(password.encode("utf-8"))
print(ret.hexdigest())
5. c o l l e c t i o n s
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
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)
from collections import Counter
c = Counter("csdcsdcsdcsdcsdcs")
print(c)
#计算次数