03序列化模块

04加密模块

05 os sys 模块

06 collections 模块

# 03 序列化模块

# 网络传输数据:字节 bytes# 文件写入内容:bytes , str

# dic = {'city':'柳州','sport':['篮球','滑板','游戏']}# s1 = str(dic)# print(s1,type(s1))# print(dic)

# b1 = s1.encode('utf-8')# print(b1,type(b1))# s2 = b1.decode('utf-8')# print(s2,type(s2))# # s3 = dict(s2)##无法转# dic1 = eval(s2)# print(dic1,type(dic1))

# 1 以上的eval 不安全最好不要用# 现在需要一个功能:将数据 转化成可以通过网络传出的bytes# 将数据(数据结构)  ---> 特殊的字符串(可以用于网络传输)  序列化过程# 将这个特殊的字符串 ----> 转化成原来的数据结构  反序列化过程

# python给咱们提供的序列化模块

import json  #序列化模块,所有语言通用的一种标准(数据转化格式             #str int bool dict list tuple None

import pickle  #序列化模块,只支持python语言之间的互相传输               #所有数据类型,对象都可以进行网络传递               #写入文件时可以写入多个

import shelve  #序列化模块,只支持python语言,与文件相关

#json# 第一队方法:dumps loads 与网络传输相关# dic = {'city':'柳州','sport':['篮球','滑板','游戏']}# s = json.dumps(dic,ensure_ascii=False)  #序列化过程# print(dic,type(dic))  #{'city': '柳州', 'sport': ['篮球', '滑板', '游戏']} <class 'dict'># print(s,type(s))  #{"city": "柳州", "sport": ["篮球", "滑板", "游戏"]} <class 'str'>

# dic1 = json.loads(s)  #反序列化过程# print(dic1,type(dic1))  #{'city': '柳州', 'sport': ['篮球', '滑板', '游戏']} <class 'dict'>

# 第二对 dump load 与文件相关dic = {'city':'柳州','sport':['篮球','滑板','游戏']}# with open('序列化',encoding='utf-8',mode='w') as f1:#     json.dump(dic,f1,ensure_ascii=False)  #序列化过程

# with open('序列化',encoding='utf-8') as f2:#     ret = json.load(f2)# print(ret,type(ret))

#test  #不能str--dict()-->dict

# dic = str(dic)  #不能str--dict()-->dict# print(dic,type(dic))# dic = dict(dic)# print(dic,type(dic))

# with open('test',encoding='utf-8',mode='w') as f1:#     f1.write(dic)  #无法写入,报错:TypeError: write() argument must be str, not dict                     #只能写入str

# with open('test',encoding='utf-8',mode='w') as f1:#     dic = str(dic)#     f1.write(dic)# with open('test',encoding='utf-8') as f2:#     s = f2.read()# print(s,type(s))  #{'city': '柳州', 'sport': ['篮球', '滑板', '游戏']} <class 'str'># s = dict(s)  ##不能str--dict()-->dict# print(s,type(s))    #

# 参数讲解:# dic = {'name': "太白金星",#        'hobby_list': ['戒烟', '烫不了头', '戒酒'],#        'age': 18,#        'money': '1个亿'}# print(dic)# s = json.dumps(dic,ensure_ascii=False,sort_keys=True,separators=('|',','))  # 序列化过程# sort_keys 按键排序0# ensure_ascii=False 显示中文# separators=('|',',') 设置分隔符 没有意义# print(s)# 讨论json  与bytes 的区别# bytes 只能操作str  用于网络传输# json 可以操作 str int  bool dict list(tuple) None 用于网络传入,写入文件

# 通过json将多个字典写入一个文件# 如果用dump load 一个文件只能写入一个数据结构# dic1 = {'name': '春哥'}# dic2 = {'name': '子伍'}# dic3 = {'name': '王子'}# with open('多个字典.json', encoding='utf-8', mode='w') as f1:#        json.dump(dic1,f1)#        f1.write('\n')#        json.dump(dic2,f1)#        f1.write('\n')#        json.dump(dic3,f1)#        f1.write('\n')

# with open('多个字典.json', encoding='utf-8',) as f1:#        ret1 = json.load(f1)#        ret2 = json.load(f1)#        ret3 = json.load(f1)# print(ret1,ret2,ret3)# dic1 = {'name': '春哥'}# # dic2 = {'name': '子伍'}# # dic3 = {'name': '王子'}# # 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))

# 总结:# dumps loads 用于网络传输 和 多个数据写入文件# dump load 只能用于一个数据结构写入文件

# 坑:# dic = {1: 'alex'}# ret = json.dumps(dic)# print(ret)# print(json.loads(ret))  #1变成'1'
# pickleimport pickle# dumps loads 用于网络传输 :将数据结构 ----> 转化成bytes# dic = {'name': "太白金星",#        'hobby_list': ['戒烟', '烫不了头', '戒酒'],#        'age': 18,#        'money': '1个亿'}# s1 = pickle.dumps(dic)# print(s1)  #bytes# dic2 = pickle.loads(s1)# print(dic2,type(dic2))# dic = {'name': "太白金星",#        'hobby_list': ['戒烟', '烫不了头', '戒酒'],#        'age': 18,#        'money': '1个亿'}# with open('p1.pickle',mode='wb') as f1:#     pickle.dump(dic,f1)# # with open('p1.pickle',mode='rb') as f2:#     ret = pickle.load(f2)# print(ret,type(ret))
# 利用dump load 将多个数据写入文件#dic1 = {'name': '春哥'}#dic2 = {'name': '子伍'}#dic3 = {'name': '王子'}

# with open('p2.pickle',mode='wb') as f1:#     pickle.dump(dic1,f1)#     pickle.dump(dic2,f1)#     pickle.dump(dic3,f1)

# with open('p2.pickle',mode='rb') as f1:#     ret1 = pickle.load(f1)#     ret2 = pickle.load(f1)#     ret3 = pickle.load(f1)# print(ret1,ret2,ret3)

# def func():#     print(666)## with open('p3.pickle',mode='wb') as f1:# #     pickle.dump(func,f1)

# with open('p3.pickle',mode='rb') as f1:# #     ret = pickle.load(f1)# # ret()

import shelve# f = shelve.open('shelve_file')# f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接对文件句柄操作,就可以存入数据# f.close()# 给文件写入一个字典:{'key':{'int':10, 'float':9.5, 'string':'Sample data'}}

# f = shelve.open('shelve_file')# print(f['key'])# f.close()

# import shelve# f1 = shelve.open('shelve_file',writeback=True)# print(f1['key'])# f1['key']['new_value'] = 'this was not here before'# f1.close()

# f1 = shelve.open('shelve_file')# print(f1['key'])# f1.close()# writeback=True 如果相对shelve文件进行修改,必须要添加这个参数

# 04 加密模块

# 加密模块 摘要算法 一堆加密算法的集合体import hashlib# 给密码加密。# 文件的校验。

# hashlib: 将str类型 通过算法 -----> 一串等长度的数字。# 1,不同的字符串 转化成数字肯定不同。# 2,相同的字符串即使在不同的计算机上只要使用相同的加密方式 转化成的数字一定相同。# 3,hashlib加密不可逆,不能破解。

import hashlib# md5 加密# ret = hashlib.md5()# ret.update('好123'.encode('utf-8'))# print(ret.hexdigest())

# 加盐# 让你的密码更复杂。# ret = hashlib.md5('老男孩教育'.encode('utf-8'))# # ret.update('123456'.encode('utf-8'))# # print(ret.hexdigest())

# 动态的盐# username = input('请输入用户名:')# ret = hashlib.md5(username[::2].encode('utf-8'))# ret.update('123456'.encode('utf-8'))# print(ret.hexdigest())

# md5 加密效率快,通用,安全性相对差# sha系列,算法更好 安全性高,效率低,耗时长

import hashlib# ret = hashlib.sha1()# ret.update('gjfds;gfjdgfkdg;lfdkg;fdlgk;fldgk;fldg'.encode('utf-8'))# print(ret.hexdigest())

# ret = hashlib.sha512()  #更复杂# ret.update('gjfds;gfjdgfkdg;lfdkg;fdlgk;fldgk;fldg'.encode('utf-8'))# print(ret.hexdigest())

# 文件校验。

# 文件较小用下面代码。# def check_md5(file):#     ret = hashlib.md5()#     with open(file,mode='rb') as f1:#         ret.update(f1.read())#         return ret.hexdigest()# print(check_md5('文件校验1'))# print(check_md5('文件校验2'))

# ret = hashlib.md5()# ret.update('老男孩教育是最好的培训学校'.encode('utf-8'))# print(ret.hexdigest())  # b549bba39c1e6fd58865b2ba61a3bdff

# ret = hashlib.md5()# ret.update('老男孩教育'.encode('utf-8'))# ret.update('是最好的'.encode('utf-8'))# ret.update('培训'.encode('utf-8'))# ret.update('学校'.encode('utf-8'))# print(ret.hexdigest())  # b549bba39c1e6fd58865b2ba61a3bdff

# 大文件的校验:# 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)#             else:#                 break#         return ret.hexdigest()

# print(check_md5('文件校验1'))# print(check_md5('文件校验2'))
# def check_md5(file):#     ret = hashlib.md5()#     with open(file,mode='rb') as f1:#         for line in f1:#             ret.update(line)#         return ret.hexdigest()

# print(check_md5('文件'))

# 05 os sys模块

import os# 工作目录,父级目录,当前目录,此文件从属的文件夹的路径

# 获取当前目录# print(os.getcwd()) # D:\python骑士计划3期\day14  ***# os.chdir('d:\\')  # 切换工作目录# print(os.getcwd())# print(os.curdir)# print(os.pardir)

# 例题:# os.chdir(os.pardir)# print(os.getcwd())# print()

# 和文件夹相关# os.mkdir('文件夹1')  # 一次和创建一个文件夹  **

# os.mkdir('文件夹1\文件夹2')# os.rmdir('文件夹1\文件夹2') # 一次删除一个# os.makedirs('文件夹a\文件夹b\文件夹c\文件夹d')  # 递归创建文件夹  ***# os.removedirs('文件夹a\文件夹b\文件夹c\文件夹d')  # 递归删除检测出有文件则停止删除# print(os.listdir('D:\python骑士计划3期\day14 '))  #**

# 和文件相关:# os.remove('os模块练习')  # ***# os.rename('os模块','new os')  # ***# print(os.stat(r'D:\python骑士计划3期\day14\05 os sys模块.py'))

# 操作系统差异相关# 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('05 os sys模块.py'))  # 获取绝对路径# print(os.path.split(os.path.abspath(__file__))) #  将path分割成目录和文件名二元组返回# ('D:\\python骑士计划3期\\day14', '05 os sys模块.py')# print(os.path.basename(os.path.abspath(__file__)))  # 将文件名返回# print(os.path.exists(__file__)) # 判断路径是否存在# print(os.path.abspath(__file__))# print(os.path.isabs('05 os sys模块.py'))  # False# print(os.path.isfile('barry.json'))  # 判断此文件是否存在  ***# print(os.getcwd())  # D:\python骑士计划3期\day14# path = os.path.join(os.getcwd(), '05 os sys模块.py')  ***# print(path)# print(os.path.getatime('barry.json'))  # 返回path所指向的文件或者目录的最后访问时间# print(os.path.getsize(__file__))  # 返回你的文件大小

# logfile_name = 'all2.log'  # log文件名

# logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录# # print(logfile_dir)

# # 如果不存在定义的日志目录就创建一个# if not os.path.isdir(logfile_dir):#     os.mkdir(logfile_dir)

# # # log文件的全路径# logfile_path = os.path.join(logfile_dir, logfile_name)

# sysimport sys# print(sys.argv)# print(666)# sys.exit('意外中断....')# print(666)# print(sys.version)  # 获取Python解释程序的版本信息# # print(sys.platform)

# import sys# try:#     sys.exit('意外中断....')# except SystemExit as e:#     print(e)

# 06 collections模块

# 1 namedtuple# from collections import namedtuple# point = namedtuple('point',['x','y'])# p = point(1,2)# print(p)# print(p[0])# print(p.x)# print(p.x + p.y)

# dequefrom collections import deque# q = deque(['a','b','c'])# print(q)# 从右边增加值# q.append('x')# q.append('y')# # 从右边删除值# q.pop()# q.pop()# 从左边增值# q.appendleft('x')# q.appendleft('y')# # 从左边删除# q.popleft()# q.popleft()# print(q)

# defaultdictfrom collections import defaultdict# values = [11, 22, 33, 44, 55, 77, 88, 99, 90]# my_dict = defaultdict(list)# my_dict['key1']# my_dict['key2']# my_dict['key3']# print(my_dict)# for val in values:#     if val > 66:#         my_dict['key1'].append(val)#     else:#         my_dict['key2'].append(val)# print(my_dict)# 构建一个字典;字典的key 从1~100,对应的值都是666# {1:666,2:666,3:666......}# dic = dict.fromkeys(range(1,101),666)# print(dic)

# print({key:666 for key in range(1,101)})# def func():#     return 666# my_dict = defaultdict(func)# for i in range(1,101):#     my_dict[i]# print(my_dict)#from collections import Counter# s1 = '电脑电脑sldfjslffdsaf'# s1 = ['电脑','电脑','电脑','电脑','书']# c = Counter(s1)# print(c)# print(c['f'])# print(c['d'])# print(dict(c))

day15_python_1124的更多相关文章

随机推荐

  1. Parallels Desktop 重装系统

    安装教程,大家可以在网上找找 现在我想重装系统,怎么弄呢? 1.~/Documents/Parallels 目录下那个PVM后缀的文件直接删除 2.重装找开虚拟机,会弹出一个框,说找不到系统,点击删除 ...

  2. idea快捷键使用

    idea                                 eclipse project                           workspace module     ...

  3. This Debug perspective is designed to support application debugging.it incorporates views for displaying the debug stack,variables and breakpoint mamagement

    使用IDE(Eclipse Version:Neon.2 Release (4.6.2)),出现以下提示信息: This kind of launch is configured to openthe ...

  4. ASP.net MVC5 Code First填充测试数据到数据库

    问题的产生  最近在看Adam Freeman的“Pro ASP.NET MVC5”,于是在工作机上面搭建了相应的运行环境,但是在自己的机器上面只有代码,没有数据库.记得在code first中可以新 ...

  5. POJ 2154 color (polya + 欧拉优化)

    Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). You ...

  6. 20155228 2017-11-19 实现mypwd(选做,加分)

    20155228 2017-11-19 实现mypwd(选做,加分) 题目和要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd ...

  7. HP Jack介绍

    转载:https://www.cnblogs.com/Peter-Chen/p/3999212.html 目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为he ...

  8. Beaglenone读取编码器数据

    一般情况下,beaglebone black默认启动两个cape: 1.BB-BONE-EMMC-2G 2.BB-BONELT-HDMI 我们可以通过编辑uEnv.txt的文件来决定是否启动HDMI, ...

  9. Jquery回到顶部效果

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  10. map的实际操作用并for_each遍历

    #include<iostream> #include<map> #include<algorithm> #include<string> using ...