json os sys 摘要 collections

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]})
原文地址:https://www.cnblogs.com/beichen123/p/11254184.html