![]()
1、json模块
是一种所有语言通用的标准,使用于:str int bool dict list (tuple) None
# 最好用这个写文件
dic={'name':'tbb'}
with open('序列化3.json',encoding='utf-8',mode='w') as f1:
f1.write(json.dumps(dic))
with open('序列化4.json', encoding='utf-8') as f2:
ret = json.loads(f2.read())
# 网络传输
# dic = {'name': "bb", 'hobby_list': ['戒烟', '烫不了头', '戒酒']}
# print(type(dic))
# s = json.dumps(dic,ensure_ascii=False) # 序列化过程 成字符串
# print(s,type(s))
# dic1 = json.loads(s) # 反序列化过程 成字典
# print(dic1, type(dic1))
# 通过json将多个字典写入文件
dic1 = {'name': 'bb'}
dic2 = {'name': 'tt'}
dic3 = {'name': 'dd'}
with open('多个字典.json', encoding='utf-8',mode='w') as f1:
f1.write(json.dumps(dic1)+'\n')
f1.write(json.dumps(dic2)+'\n')
f1.write(json.dumps(dic3)+'\n')
with open('多个字典.json', encoding='utf-8') as f2:
for line in f2:
print(json.loads(line))
2、pickle
dumps loads 用于网络传输:将数据结构转化为bytes
dic = {'name':'tx'}
with open('p1.pickle',mode='wb') as f1:
pickle.dump(dic,f1)
with open('p1.pickle',mode='rb') as f2:
ret = pickle.load(f2)
3、md5 给密码加密,文件的校验
hashlib: 将str类型 通过算法——>一串等长度的数字
1、不同的字符串 转化成的数字肯定不同
2、相同的字符串即使在不同的计算机,只要使用相同的加密方式,
转化成的数字一定相同
3、hashlib加密不可逆,不能破解
import hashlib
ret = hashlib.md5()
ret.update('hao123'.encode('utf-8'))
print(ret.hexdigest())
# 结果 51cb75f82eceb17b86f019e01618d75e
4、加盐及动态加盐
import hashlib
username = input('>>>') # 获取用户名,利用不同的用户名来做动态盐
ret = hashlib.md5(username.encode('utf-8')) # username可以切片取
ret.update('123456'.encode('utf-8'))
print(ret.hexdigest())
# 结果 6a2f00c33e6dd857e069fbaced6a6c42
# 文件的校验
def check_md5(file): # 命名一个函数
ret = hashlib.md5()
with open(file,mode='rb') as f1:
while 1:
content = f1.read(1024) # 每次读取最多1024个字节
if content:
ret.update(content.encode('utf-8'))
else:
break
print(ret.hexdigest())
check_md5('文件校验1')
check_md5('文件校验2')
5、collections模块
# deque
from collections import deque
q = deque['a','b','c']
q.append('x')
q.append('y')
print(q)
# 结果 (['a','b','c','x','y']) # 默认右边逐个增加
q.pop()
# 结果 (['a','b','c','x']) # 默认右边逐个删除
q.appendleft('x') # 从左边逐个增加
q.popleft() # 从左边逐个删除
# Counter
from collections import Counter
s1 = 'sldfjslffdsaf' # 可以是字符串也可以是列表,将元素逐个结算,返回字典
c = Counter(s1)
print(c)
# 结果 Counter({'f': 4, 's': 3, 'l': 2, 'd': 2, 'j': 1, 'a': 1})
6、常用操作
# 获取当前目录
print(os.getcwd()) # 获取当前路径
os.chdir('d:\\')
print(os.getcwd()) # 跳转到指定路径,并打印路径
print(os.curdir) # 当前路径 .
print(os.pardir) # 上上级路径 ..
os.chdir(os.pardir) # 跳转到上上级路径 ...
# 跟文件夹相关
os.mkdir('文件夹') # 一次创建一个文件夹,不能创建多个
os.rmdir('文件夹') # 一次删除一个文件夹
os.makedir('文件夹1\文件夹2') # 一次创建多个文件夹
os.removedirs('文件夹1\文件夹2') # 一次删除多个文件夹,不为空则不能删除
os.remove('文件夹1') # 删除文件
os.rename('old_name','new_name') # 改名
# 与操作系统差异相关
print(os.sep) # 当前系统换行符分隔符
print(repr(os.linesep))
print(os.pathsep)
print(os.name)
# 执行系统命令相关
print(os.system('dir')) # 打印当前磁盘目录
print(os.popen('dir').read()) # 打印当前磁盘目录,可读状态
print(os.environ) # 打印环境
print(os.path.abspath(__file__)) # 打印当前绝对模块名
print(os.path.abspath('文件名')) # 打印文件名绝对路径
print(os.path.split(os.path.abspath(__file__))) # 把当前模块和路径分开打印到一个元 祖中
print(os.path.basename(os.path.abspath(__file__))) # 当前模块名
print(os.path.exists(__file__)) # 当前模块名是否存在
print(os.path.isfile('文件名'))) # 文件名是否存在
print(os.path.getatime('文件名')') # 文件名修改时间
print(os.path.getsize(__file__)) # 文件大小