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. MySQL服务安全加固

    数据库管理人员可以参考本文档进行 MySQL 数据库系统的安全配置加固,提高数据库的安全性,确保数据库服务稳定.安全.可靠地运行. 漏洞发现 您可以使用安骑士企业版自动检测您的服务器上是否存在 MyS ...

  2. SpringBoot项目启动时链接数据库很慢

    SpringBoot项目启动时链接数据库很慢 springboot项目在启动时候,如下图所示,链接数据库很慢 解决方法:在mysql 的配置文件中 配置 skip-name-resolve

  3. Alpha阶段敏捷冲刺日志的集合贴

    敏捷冲刺日志的集合贴 Day1(4.17):http://www.cnblogs.com/software-teamwork/p/8861426.html Day2(4.20):http://www. ...

  4. Delphi文件目录操作(转载)

    Delphi判断文件夹(目录)是否存在,不存在就创建一个,可以一次创建多级目录 procedure TForm1.Button1Click(Sender: TObject);begin if not ...

  5. demo1:会下蛋的机器人

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 杂谈迁移tomcat项目到docker,以及遇到的问题

    1.迁移tomcat项目异常简单,下一个tomcat的container,然后直接把webapps放进去就行了. #tomcat版本随原始项目版本而变,具体版本列表查看:https://hub.doc ...

  7. 点火开关分为4个档位,分别是off,acc,IG-on,和ST

    off全车除了常火(如应急灯,时钟等的记忆功能)外,均不供电.acc 是附件档,部分车载附属设备供电,如视听系统,仪表灯,灯光等.也就是说,车停在哪里,发动机不转,除了空调不能用外,车内的设备基本都可 ...

  8. Java集群优化——使用Dubbo对单一应用服务化改造

    之前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容,就 ...

  9. Linux 网络管理、软件包安装

    1.fdisk -l 查看处系统磁盘设备,打boot“*”的是系统启动的磁盘块. (1)查看磁盘Disk /dev/sdb:5368MB(总大小),5368709120bytes(比特位) (2)25 ...

  10. java限制map大小,并FIFO淘汰

    有时候需要往一个MAP中写入一些记录,但又怕无限制地写入会导致内存爆掉,所以得限制这个MAP的大小. 实现:LinkedHashMap提供了简单的方法. 首先,定义一个最大数,比如1000,然后new ...