Fifteen json_pickle_md5_加盐模块

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__))    # 文件大小

 

posted @ 2019-01-09 14:35  pythonernoob  阅读(148)  评论(0)    收藏  举报