1.序列化
json
1.dumps loads
import json
dumps 将对象转换成字符串(序列化)
lst = [1,2,3,4,5]
print(repr(json.dumps(lst)))
# "[1,2,3,4,5]"
loads 将字符串转换成对象(反序列化)
str_lst = '[1, 2, 3, 4, 5]'
lst = json.loads(str_lst)
print(repr(lst))
# [1,2,3,4,5]
特例:
dic = {"k1":"名字"}
str_dic = json.dumps(dic)
print(str_dic)
# {"k1": "u540du5b57"}
解决方法:
dic = {"k1":"名字"}
str_dic = json.dumps(dic,ensure_ascii=False)
print(str_dic)
# {"k1": "名字"}
# 关闭ascii码
2.dump load
dump 将对象转换成字符串写入文件当中(序列化)
import json
lst = [1,2,3,4,5,6]
with open("info","w",encoding="utf-8")as f:
json.dump(lst,f)
# info文件中写入一行[1,2,3,4,5,6]
load 将文件中的字符串转换成对象(反序列化)
import json
lst = [1,2,3,4,5,6]
with open("info","r",encoding="utf-8")as f:
lst1 = json.load(f)
print(lst1)
# [1,2,3,4,5,6]
同时读取多个内容进行反序列
with open("info","r",encoding="utf-8")
for i in f:
l = json.loads(i)
print(l)
pickle
序列化(可对python所有对象进行转换)
python自带的(只有python可以用)
1.dumps loads
对象转换成类似字节
import pickle
lst = [1,2,3,4,5]
b_lst = pickle.dumps(lst)
print(b_lst)
# b'x80x03]qx00(Kx01Kx02Kx03Kx04Kx05e.'
类似字节转换成对象
import pickle
lst = [1,2,3,4,5]
b_lst = pickle.dumps(lst)
t_lst = pickle.loads(b_lst)
print(t_lst)
# [1,2,3,4,5]
2.dump load
将对象转换成乱码写入对象
import pickle
dic = {"user":"baoyuan"}
pickle.dump(dic,open("info","wb"))
# �}q X userqX baoyuanqs.
将乱码转换成对象输出
import pickle
dic = {"user":"baoyuan"}
pickle.dump(dic,open("info","wb"))
print(pickle.load(open("info","rb")))
# {'user': 'baoyuan'}
对象转换成乱码多行写入
import pickle
dic = {"1":2}
with open("info","wb")as f:
s = "
".encode("utf-8")
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
乱码转换对象全部读取
import pickle
dic = {"1":2}
with open("info","wb")as f:
s = "
".encode("utf-8")
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f.write(pickle.dumps(dic) + s)
f1 = open("info","rb")
for i in f1:
print(pickle.loads(i))
总结:
1.推荐使用json
2.json是各种语言通用的
3.pickle是python私有的
2.os
os模块 -- 程序员通过python向操作系统发送指令(与操作系统交互的接口)
1.工作目录
当前工作路径
print(os.getcwd())
路径切换
os.chdir(r"D:pycharm demo123")
当前目录
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())
3.文件
import os
修改名字
os.rename("123","info")
删除文件
os.remove("info")
4.路径
import os
通过相对路径获取绝对路径
print(os.path.abspath("info"))
将路径以最后一个""切割(路径,文件名)
print(os.path.split(os.path.abspath("info")))
获取路径
print(os.path.dirname("D:pycharm demoinfo"))
获取文件名
print(os.path.basename("D:pycharm demoinfo"))
判断路径是否存在
print(os.path.exists("D:pycharm demoinfo"))
判断是不是路径
print(os.path.isdir(r"D:pycharm demo"))
判断是不是文件名
print(os.path.isfile("info"))
判断是不是绝对路径
print(os.path.isabs("D:pycharm demoinfo"))
路径拼接
print(os.path.join("D:\","pycharm demo","info"))
文件最后修改的时间(返回时间戳)
print(os.path.getatime("D:pycharm demoinfo"))
文件最后的访问时间(返回时间戳)
print(os.path.getctime("D:pycharm demoinfo"))
print(os.path.getmtime("D:pycharm demoinfo"))
获取当前文件的大小(返回字节b)
print(os.path.getsize("D:pycharm demo代码练习.py"))
3.sys
sys -- 与python解释器交互的接口
import sys
脚本本身,当前文件运行(返回一个绝对路径)
print(sys.argv)
退出程序,正常退出时exit(0),错误退出sys.exit(1)
print(sys.exit(n))
获取解释器版本
print(sys.version)
添加自定义模块查找路径
print(sys.path)
区分操作系统然后进行相关逻辑操作
print(sys.platform)
4.加密
hashlib 加密和校验
加密
alex:alex123
加密后:alex:23lw23jky321jh4gqyt1234gj8b7t
{"1234":23lw23jky321jh4gqyt1234gj8b7t}
常用的加密
md5,sha1,sha256,sha512
1.只要明文相同密文就是相同的
2.只要明文不相同密文就是不相同的
3.不能反逆(不能解密) -- md5中国人破解了
加密过程:
1.加密的内容
2.将要加密的内容转成字节
示例:
md5示例:
import hashlib
md5 = hashlib.md5()
md5.update("alex123".encode("utf-8"))
print(md5.hexdigest())
sha1示例:
import hashlib
sha1 = hashlib.sha1()
sha1.update("alex123".encode("utf-8"))
print(sha1.hexdigest())
最常用的是md5但是被中国人破解
平时加密的时候使用sha1
加盐(二次加密)
加固定盐
import hashlib
md5 = hashlib.md5("alex".encode("utf-8"))
md5.update("wusir".encode("utf-8"))
print(md5.hexdigest())
动态加盐
user = input("user")
pwd = input("pwd")
import hashlib
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())
tips
import hashlib
ss = "baoyuanwusirtaibai"
s = "baoyuan"
s1 = "wusir"
s2 = "taibai"
md5 = hashlib.md5()
md5.update(ss.encode("utf-8"))
print(md5.hexdigest())
import hashlib
ss = "baoyuanwusirtaibai"
s = "baoyuan"
s1 = "wusir"
s2 = "taibai"
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("tu",["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
p = point({"key":(1,2,3,4)},20,10)
print(p)
# tu(a={'key': (1, 2, 3, 4)}, b=20, c=10)
2.deque
# 双端队列,可以快速的从另外一端追加和推出对象
from collections import deque
lst = deque([1,2,3,4,5,6])
lst.append(8)
lst.appendleft(0)
print(lst)
# deque([0,1,2,3,4,5,6,8])
lst = deque([1,2,3,4,5,6])
lst.pop()
lst.popleft()
print(lst)
# deque([2,3,4,5])
# 队列:先进先出
# 栈:先进后出 -- 栈顶
3.counter
c = Counter('abcdeabcdabcaba')
print(c)
# Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
4.orderedDict
有序字典,python3.6以上默认有序
5.defaultdict
from collections import defaultdict
dic = defaultdict(list)
dic["k1"].append(12)
print(dic)
# defaultdict(<class 'list'>, {'k1': [12]})