# 实例化  归一化 初始化 序列化    # 列表 元组 字符串# 字符串# .......得到一个字符串的结果 过程就叫序列化# 字典 / 列表 / 数字 /对象 -序列化->字符串# 为什么要序列化    # 1.要把内容写入文件 序列化    # 2.网络传输数据     序列化# 字符串-反序列化->字典 / 列表 / 数字 /对象

# 方法# dic = {'k':'v'}# str_dic = str(dic)# print(dict(str_dic))# print([eval(str_dic)])# eval不能随便用

# jsonimport json# 只提供四个方法# dic = {'aaa':'bbb','ccc':'ddd'}# str_dic = json.dumps(dic)# print(dic)# print(str_dic,type(str_dic))# with open('json_dump','w') as f:#     f.write(str_dic)# ret = json.loads(str_dic)# print(ret,type(ret))# print(ret['aaa'])

# dic = {'aaa':'bbb','ccc':'ddd'}# with open('json_dump2','w') as f:#     json.dump(dic,f)

# with open('json_dump2') as f:#     print(type(json.load(f)))
import json# json格式的限制1,json格式的key必须是字符串数据类型# json格式中的字符串只能是""

# 如果是数字为key,那么dump之后会强行转成字符串数据类型# dic = {1:2,3:4}# str_dic = json.dumps(dic)# print(str_dic)# new_dic = json.loads(str_dic)# print(new_dic)

# json是否支持元组,对元组做value的字典会把元组强制转换成列表# dic = {'abc':(1,2,3)}# str_dic = json.dumps(dic)# print(str_dic)# new_dic = json.loads(str_dic)# print(new_dic)

# json是否支持元组做key,不支持# dic = {(1,2,3):'abc'}# str_dic = json.dumps(dic)  # 报错

# 对列表的dump# lst = ['aaa',123,'bbb',12.456]# with open('json_demo','w') as f:#     json.dump(lst,f)# with open('json_demo') as f:#     ret = json.load(f)#     print(ret)

# 能不能多次dump数据到文件里,可以多次dump但是不能load出来了# dic = {'abc':(1,2,3)}# lst = ['aaa',123,'bbb',12.456]# with open('json_demo','w') as f:#     json.dump(lst,f)#     json.dump(dic,f)# with open('json_demo') as f:#     ret = json.load(f)#     print(ret)

# 想dump多个数据进入文件,用dumps# dic = {'abc':(1,2,3)}# lst = ['aaa',123,'bbb',12.456]# with open('json_demo','w') as f:#     str_lst = json.dumps(lst)#     str_dic = json.dumps(dic)#     f.write(str_lst+'\n')#     f.write(str_dic+'\n')

# with open('json_demo') as f:#     for line in f:#         ret = json.loads(line)#         print(ret)

# 中文格式的 ensure_ascii = False# dic = {'abc':(1,2,3),'country':'中国'}# ret = json.dumps(dic,ensure_ascii = False)# print(ret)# dic_new = json.loads(ret)# print(dic_new)

# with open('json_demo','w',encoding='utf-8') as f:#     json.dump(dic,f,ensure_ascii=False)

# json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间# import json# data = {'username':['李华','二愣子'],'sex':'male','age':16}# json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)# print(json_dic2)

# set不能被dump/dumps

********************************************************************************************
import  pickle# dump的结果是bytes,dump用的f文件句柄需要以wb的形式打开,load所用的f是'rb'模式# 支持几乎所有对象的序列化# 对于对象的序列化需要这个对象对应的类在内存中# 对于多次dump/load的操作做了良好的处理

# pic_dic = pickle.dumps(dic)# print(pic_dic)    # bytes类型# new_dic = pickle.loads(pic_dic)# print(new_dic)

# pickle支持几乎所有对象的# class Student:#     def __init__(self,name,age):#         self.name = name#         self.age = age## alex = Student('alex',83)# ret = pickle.dumps(alex)# 小花 = pickle.loads(ret)# print(小花.name)# print(小花.age)

# class Student:#     def __init__(self,name,age):#         self.name = name#         self.age = age## alex = Student('alex',83)# with open('pickle_demo','wb') as f:#     pickle.dump(alex,f)# with open('pickle_demo','rb') as f:#     旺财 = pickle.load(f)#     print(旺财.name)

# 学员选课系统  pickle模块来存储每个学员的对象

# with open('pickle_demo','wb') as f:#     pickle.dump({'k1':'v1'}, f)#     pickle.dump({'k11':'v1'}, f)#     pickle.dump({'k11':'v1'}, f)#     pickle.dump({'k12':[1,2,3]}, f)#     pickle.dump(['k1','v1','l1'], f)

# with open('pickle_demo','rb') as f:#     while True:#         try:#             print(pickle.load(f))#         except EOFError:#             break
******************************************************************************************** 
import shelvef = shelve.open('shelve_demo')f['key'] = {'k1':(1,2,3),'k2':'v2'}f.close()

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

# shelve  如果你写定了一个文件# 改动的比较少# 读文件的操作比较多# 且你大部分的读取都需要基于某个key获得某个value
********************************************************************************************  

# 摘要算法的模块import hashlib# 能够把 一个 字符串 数据类型的变量# 转换成一个 定长的 密文的 字符串,字符串里的每一个字符都是一个十六进制数字

# 对于同一个字符串,不管这个字符串有多长,只要是相同的,# 无论在任何环境下,多少次执行,在任何语言中# 使用相同的算法\相同的手段得到的结果永远是相同的# 只要不是相同的字符串,得到的结果一定不同

# 登录的密文验证# 'alex3714'  # -> '127649364964908724afd'

# 字符串 --> 密文# 密文 不可逆的 字符串

# 1234567 - > '127649364964908724afd'# 算法 : 对于同一个字符串,用相同的算法,相同的手段去进行摘要,获得的值总是相同的# 1234567 - > '127649364964908724afd'

# s1 = 'alex3714'  # aee949757a2e698417463d47acac93df# s2 = 'alex3714qwghkdblkasjbvkhoufyowhdjlbvjnjxc'  # d2d087c10aeba8276b21f8697ad3e810# md5是一个算法,32位的字符串,每个字符都是一个十六进制# md5算法 效率快 算法相对简单# md5_obj = hashlib.md5()# md5_obj.update(s1.encode('utf-8'))# res = md5_obj.hexdigest()# print(res,len(res),type(res))

# 数据库 - 撞库# 111111 --> 结果# 666666# 123456# alex3714 --> aee949757a2e698417463d47acac93df

# s1 = '123456'# md5_obj = hashli b.md5()# md5_obj.update(s1.encode('utf-8'))# res = md5_obj.hexdigest()# print(res,len(res),type(res))

# 加盐  # alex3714  d3cefe8cdd566977ec41566f1f11abd9# md5_obj = hashlib.md5('任意的字符串作为盐'.encode('utf-8'))# md5_obj.update(s1.encode('utf-8'))# res = md5_obj.hexdigest()# print(res,len(res),type(res))

# 恶意用户 注册500个账号# 张三|123456  '任意的字符串作为盐'.encode('utf-8') d3cefe8cdd566977ec41566f1f11abd8# 李四|111111

# 动态加盐# username = input('username : ')# passwd = input('password : ')# md5obj = hashlib.md5(username.encode('utf-8'))# md5obj.update(passwd.encode('utf-8'))# print(md5obj.hexdigest())# ee838c58e5bb3c9e687065edd0ec454f

# sha1也是一个算法,40位的字符串,每个字符都是一个十六进制# 算法相对复杂 计算速度也慢# md5_obj = hashlib.sha1()# md5_obj.update(s1.encode('utf-8'))# res = md5_obj.hexdigest()# print(res,len(res),type(res))

# 文件的一致性校验# md5_obj = hashlib.md5()# with open('5.序列化模块_shelve.py','rb') as f:#     md5_obj.update(f.read())#     ret1 = md5_obj.hexdigest()## md5_obj = hashlib.md5()# with open('5.序列化模块_shelve.py.bak','rb') as f:#     md5_obj.update(f.read())#     ret2 = md5_obj.hexdigest()# print(ret1,ret2)

# 如果这个文件特别大,内存装不下# 8g 10g# 按行读  文本 视频 音乐 图片 bytes# 按字节读 23724873 10240

# md5_obj = hashlib.md5()# md5_obj.update('hello,alex,sb'.encode('utf-8'))# print(md5_obj.hexdigest())

# md5_obj = hashlib.md5()# md5_obj.update('hello,'.encode('utf-8'))# md5_obj.update('alex,'.encode('utf-8'))# md5_obj.update('sb'.encode('utf-8'))# print(md5_obj.hexdigest())

# 大文件的已执行校验

md5_obj = hashlib.md5()with open('5.序列化模块_shelve.py.bak','rb') as f:    md5_obj.update(f.read())    # 循环 循环的读取文件内容    # 循环的来updateprint(md5_obj.hexdigest())********************************************************************************************

import configparser# file类型# f = open('setting')

# 有一种固定格式的配置文件# 有一个对应的模块去帮你做这个文件的字符串处理

# settings.py 配置

# import configparser## config = configparser.ConfigParser()## config["DEFAULT"] = {'ServerAliveInterval': '45',#                       'Compression': 'yes',#                      'CompressionLevel': '9',#                      'ForwardX11':'yes'#                      }## config['bitbucket.org'] = {'User':'hg'}## config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}## with open('example.ini', 'w') as f:#    config.write(f)

import configparser

config = configparser.ConfigParser()# print(config.sections())        #  []config.read('example.ini')# print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']# print('bytebong.com' in config) # False# print('bitbucket.org' in config) # True# print(config['bitbucket.org']["user"])  # hg# print(config['DEFAULT']['Compression']) #yes# print(config['topsecret.server.com']['ForwardX11'])  #no# print(config['bitbucket.org'])          #<Section: bitbucket.org># for key in config['bitbucket.org']:     # 注意,有default会默认default的键#     print(key)# print(config.options('bitbucket.org'))  # 同for循环,找到'bitbucket.org'下所有键# print(config.items('bitbucket.org'))    #找到'bitbucket.org'下所有键值对# print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
********************************************************************************************import logging
# 功能    # 1. 日志格式的规范    # 2. 操作的简化    # 3. 日志的分级管理

# logging不能帮你做的事情    # 自动生成你要打印的内容# 需要程序员自己在开发的时候定义好 :    # 在哪些地方需要打印,要打印的内容是什么,内容的级别

# logging模块的使用 :    # 普通配置型 简单的 可定制化差    # 对象配置型 复杂的 可定制化强

# 认识日志分级

# import logging# logging.debug('debug message')      # 调试模式# logging.info('info message')        # 基础信息# logging.warning('warning message')  # 警告# logging.error('error message')      # 错误# logging.critical('critical message')# 严重错误

# import logging# logging.basicConfig(level=logging.DEBUG)# logging.debug('debug message')      # 调试模式# logging.info('info message')        # 基础信息# logging.warning('warning message')  # 警告# logging.error('error message')      # 错误# logging.critical('critical message')# 严重错误

# import logging# logging.basicConfig(level=logging.DEBUG,#                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',#                     datefmt='%a, %d %b %Y %H:%M:%S',#                     filename='test.log')# logging.debug('debug message')      # 调试模式# logging.info('info message')        # 基础信息# logging.warning('warning message')  # 警告# logging.error('error message')      # 错误# logging.critical('critical message')# 严重错误

# basicConfig# 不能将一个log信息既输出到屏幕 又输出到文件

# logger对象的形式来操作日志文件

# 创建一个logger对象# 创建一个文件管理操作符# 创建一个屏幕管理操作符# 创建一个日志输出的格式

# 文件管理操作符 绑定一个 格式# 屏幕管理操作符 绑定一个 格式

# logger对象 绑定 文件管理操作符# logger对象 绑定 屏幕管理操作符

# import logging# # 创建一个logger对象# logger = logging.getLogger()# # 创建一个文件管理操作符# fh = logging.FileHandler('logger.log',encoding='utf-8')# # 创建一个屏幕管理操作符# sh = logging.StreamHandler()# # 创建一个日志输出的格式# format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# # # 文件管理操作符 绑定一个 格式# fh.setFormatter(format1)# # 屏幕管理操作符 绑定一个 格式# sh.setFormatter(format1)# logger.setLevel(logging.DEBUG)# # logger对象 绑定 文件管理操作符# logger.addHandler(fh)# # logger对象 绑定 屏幕管理操作符# logger.addHandler(sh)# # logger.debug('debug message')      # 调试模式# logger.info('我的信息')        # 基础信息# logger.warning('warning message')  # 警告# logger.error('error message')      # 错误# logger.critical('critical message')# 严重错误

import logginga=logging.getLogger()fh=logging.FileHandler('a1',encoding='utf-8')sh=logging.StreamHandler()

format1=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')fh.setFormatter(format1)sh.setFormatter(format1)

a.setLevel(logging.DEBUG)

a.addHandler(fh)a.addHandler(sh)

a.debug('debug message')      # 调试模式a.info('我的信息')        # 基础信息a.warning('warning message')  # 警告a.error('error message')      # 错误a.critical('critical message')# 严重错误

input("")import logginglogging.basicConfig(level=logging.DEBUG,   #修改 DEBUG,INFO                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',                    datefmt='%a, %d %b %Y %H:%M:%S')exp = 3+4/4logging.debug(str(4/4))print(4)********************************************************************************************

# collections模块# 数据类型的扩展模块

# 什么是队列# 先进先出# import queue# q = queue.Queue()# print(q.qsize())# q.put(1)# q.put('a')# q.put((1,2,3))# q.put(({'k':'v'}))# print(q.qsize())# print('q : ',q)# print('get : ',q.get())# print(q.qsize())

# deque 双端队列# from collections import deque# dq = deque()# dq.append(2)# dq.append(5)# dq.appendleft('a')# dq.appendleft('b')# print(dq)# # print(dq.pop())# # print(dq)# # print(dq.popleft())# # print(dq)# print(dq.remove('a'))# print(dq.insert(2,'123'))# print(dq)

# 总结# 在insert remove的时候 deque的平均效率要高于列表# 列表根据索引查看某个值的效率要高于deque# append 和pop对于列表的效率是没有影响
												

序列化 ,hashlib ,configparser ,logging ,collections模块的更多相关文章

  1. python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)

    一.hashlib文件一致性校验 为何要进行文件一致性校验? 为了确保你得到的文件是正确的版本,而没有被注入病毒和木马程序.例如我们经常在网上下载软件,而这些软件已经被注入了一些广告和病毒等,如果不进 ...

  2. configparser logging collections 模块

    configparser 模块: 这是一个写入的模块就是把你的信息给写入的模块 #这是一个把信息写入example文件内import configparserconfig = configparser ...

  3. 常用模块(hashlib,configparser,logging)

    常用模块(hashlib,configparser,logging) hashlib hashlib 摘要算法的模块md5 sha1 sha256 sha512摘要的过程 不可逆能做的事:文件的一致性 ...

  4. 内置函数 hashlib configparser logging 模块 C/S B/S架构

    1.内置函数 # 内置的方法有很多 # 不一定全都在object中 # class Classes: # def __init__(self,name): # self.name = name # s ...

  5. 4-23 模块 hashlib ,configparser,loging,collections

    1,hashlib模块的补充(摘要算法) 1,Sha1的用法和md5的类似,通常用一个40位的16进制字符串表示.比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度 ...

  6. 模块 -- 序列化 hashlib sha logging (加密 加盐 )

    模块:  一个py文件就是一个模块 模块分类: 1:内置模块,登录模块,时间模块,sys模块,os模块等等 2: 扩展模块, 3:自定义模块,自己写的py文件 python 开发效率之高:python ...

  7. hashlib,configparser,logging模块

    一.常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  8. hashlib,configparser,logging,模块

    一,hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一 ...

  9. 常用模块(subprocess/hashlib/configparser/logging/re)

    一.subprocess(用来执行系统命令) import os cmd = r'dir D:xxx | findstr "py"' # res = subprocess.Pope ...

随机推荐

  1. asp.net mvc 快捷下拉列表

    各种表单中可能经常会遇到使用各种下拉列表的地方, 有些数据是从数据库来的, 有些则是固定数值, 为了方便, 快速的构造一个可以保持状态的下拉列表, 就出现了下面的方法 2分钟构思的代码, 比较粗糙, ...

  2. VS2015 Release 生成调试信息

    - C/C++ > 常规 > 调试信息格式 - C/C++ > 优化 > 优化 > 禁止(/Od) - 链接器 > 调试 > 生成调试信息 > 是 (/ ...

  3. [LeetCode&Python] Problem 867. Transpose Matrix

    Given a matrix A, return the transpose of A. The transpose of a matrix is the matrix flipped over it ...

  4. Photoshop通道抠出散乱的儿童头发

    抠图之前仔细分析是必不可少的.要了解清楚需要抠取部分的构成,然后选择最快捷的方法.教程素材图片人物头发色调比较单一,背景色也比较单一,用通道抠图是非常快捷的. 最终效果1 最终效果2 原图 一.复制图 ...

  5. Cassandra 数据库, python cqlsh命令

    ★  cql操作数据库(cqlsh.bat: python cqlsh命令操作<优缺点:https://blog.csdn.net/vbirdbest/article/details/77662 ...

  6. spring boot 好文

    配置: https://www.jianshu.com/p/3af2a8721d86 : Spring Boot启动报错:Whitelabel Error Page 分页: https://bbs.c ...

  7. winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新 (转)

    不显示带星号的第一列: datagridview属性框中将 RowHeadersVisiber 设置为  false 不显示未绑定列: datagridview有一个属性是 AutoGenerateC ...

  8. Entity创建一对一关系

    Area类 public virtual User User { get; set; } User类 public virtual Area Area { get; set; } Context类 m ...

  9. ML(4.2): R CART

    CART模型 :即Classification And Regression Trees.它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据挖掘中的一种常用算法.如果因变量是连续数据,相 ...

  10. meta标签和JS实现页面刷新与重定向

    下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件.1) html的实现   1 2 3 4 5 6 <head& ...