模块:  一个py文件就是一个模块

模块分类:

    1:内置模块,登录模块,时间模块,sys模块,os模块等等

    2: 扩展模块,

    3:自定义模块,自己写的py文件

python 开发效率之高:python的模块非常多, 第三方库

序列化模块

序列化:创造一个序列  ------>特殊处理(序列化)的字符串

序列化又分为3个

1,

  json适用于不同语言之间的 ,,  它有四个功能: dumps,loads,dump,load, 四个功能成对存在

json: 数据通过网络发送给别人   写入文件也用到 json

被 json序列化的字符串:

  ①可以直接通过网络互相传输

  ②可以在各个语言中通用

  

  1. import json
  2. dic = {'alex':['','','阿达']}
  3. print(str(dic)) # 基础数据类型 str 里面如果有引导就是单引号
  4. ret = json.dumps(dic) #换成了双引号 json的str类型 特殊的
  5. print(ret,type(ret))
  1. import json
  2. li = ['张三','王五','老土']
  3. f = open('haha',encoding = 'utf-8',mode = 'w')
  4. json.dump(li,f) ##将序列化的字符串存储到文件中, 写进文件后是 bytes类型
  5. f.close
  1. import json
  2. li = ['老二','老三','老四']
  3. f = open('xixi',encoding = 'utf-8')
  4. ret = json.load(f) # 读出了内容
  5. print(ret)
  6. f.close()
  1. import json (把多个序列化的字符串写入到同一个文件中)
  2. dic = {"alex":('women','women','老女人')}
  3. dic2 = {"alex1":('women','women','老女人')}
  4. dic3 = {"alex2":('women','women','老女人')}
  5.  
  6. with open('json_files',encoding = 'utf-8',mode = 'a') as f1:
  7. s1 = json.dumps(dic,ensure_ascii = False) #后面的ensure 是需要加的
  8. f1.write(s1+'\n')
  9. s2 = json.dumps(dic2,ensure_ascii = False)
  10. f1.write(s2+'\n')
  11. s3 =json.dumps(dic3,ensure_ascii = False)
  12. f1.write(s3 +'\n')
  13. 把上面的三个字典 加入到一个文件里面
  14.  
  15. with open('json_files',encoding = 'utf-8') as f2:
  16. for line in f2:
  17. dic = json.loads(line)
  18. print(dic,type(dic)) ##把里面的内容打印出来, 并判断类型
  1. import json
  2. data = {'username':['李华','二愣子'],'sex':'male','age':}
  3. json_dic2 = json.dumps(data,sort_keys=True,indent=,separators=(',',':'),ensure_ascii=False)
  4. print(json_dic2)
    得到结果: ##sort_keys 排序 indent:缩进 , separators以什么分开,键值对以什么分开
    {
      "age":16,
      "sex":"male",
      "username":[
        "李华",
        "二愣子"
      ]
    }
  1. Serialize obj to a JSON formatted str.(字符串表示的json对象)
  2. Skipkeys:默认值是False,如果dictkeys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
  3. ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。)
  4. If check_circular is false, then the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse).
  5. If allow_nan is false, then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification, instead of using the JavaScript equivalents (NaN, Infinity, -Infinity).
  6. indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的json数据也叫pretty-printed json
  7. separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionarykeys之间用“,”隔开,而KEYvalue之间用“:”隔开。
  8. default(obj) is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError.
  9. sort_keys:将数据根据keys的值进行排序。
  10. To use a custom JSONEncoder subclass (e.g. one that overrides the .default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.

2,

  pickle  只用于python语言之间的,  可支持python所有的数据类型

  缺点: 只能在Python语言中进行数据传输.

  序列化模块,python语言网络交互使用的,他支持所有的python数据类型

  也是有四个方法 和json一样:

  dumps,loads,         用于网络传输,多个数据读写一个文件

    import pickle

    dic1 = {'name':'alex'}

    s1 = pickle.dumps(dic1)     序列化过程

    dic = pickle.loads(s1)         反序列化过程

  

  dump,load              文件操作,(单个数据读写一个文件)

  多个数据读写一个文件的应用:

    代码 02 序列化模块.py中

      循环,try....

  1. import pickle
  2.  
  3. dic = {"alex": ('women','women','老女人')}
  4. dic2 = {"alex1": ('women','women','老女人')}
  5. dic3 = {"alex2": ('women','women','老女人')}
  6.  
  7. with open('pickle_files',mode = 'wb') as f1:
  8. pickle.dump(dic,f1)
  9. pickle.dump(dic2,f1)
  10. pickle.dump(dic3,f1)
  11.  
  12. 把上面字典加入到了文件夹里, 反正是看不懂的那种
  13.  
  14. with open('pickle_files',mode = 'rb') as f2:
  15. while True:
  16. try:
  17. print(pickle.load(f2))
  18. except EOFError:
  19. break
  20. 把里面的东西打印出来, 本来是一个一个往外打,这样写, 假如里面有3 打印第4个不会报错,break结束

 

  

3,

  shelve   只是python  小工具(文件方面)        可以了解一下

  1. import shelve
  2. f = shelve.open('shelve_file')
  3. f['key'] = {'int':, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
  4. f.close()
  5.  
  6. import shelve
  7. f1 = shelve.open('shelve_file')
  8. existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
  9. f1.close()
  10. print(existing)

hashlib模块

1,是一对算法的合集,它包含很多算法,(加密的)

2,hashlib的过程就是将字符串转化成数字的过程

3,hashlib 对相同的字符串转化成的数字相同

4,不同的电脑对相同的字符串进行加密,转换成的数字相同.

那么用在哪里呢????

密文(密码)

    将密码用算法加密放置到数据库,每次取出验证

文件校验.

初识   hashlib

①  md5  加密算法     常用算法,可以满足一般的常用需求

②   sha   加密算法    级别高一些, 数字越大级别越高,加密的效率越低,越安全

md5:

  1. s1 = ''
  2. ret = hashlib.md5() # 创建一个md5对象
  3. ret.update(s1.encode('utf-8')) #调用此update方法对参数进行加密 是byte类型
  4. print(ret.hexdigest()) #得到加密后的结果, 定长(长度都一样)
  5.  
  6. s2 = 'alex12fdsl,.afjsdl;fjksdal;fkdsal;fld;lsdkflas;dkfsda;3'
  7. ret = hashlib.md5() #创建一个md5对象
  8. ret.update(s2.encode('utf-8')) #调用此update方法对参数进行加密 byte类型
  9. print(ret.hexdigest()) #得到加密后的结果 定长

无论字符串多长,返回都是定长的数字

同一字符串,md5值相同

但是呢,总有一些闲人去试你的密码,  也叫撞库,因为撞库,所以相对不安全,如何解决呢?

需要加盐

  1. s3 = ''
  2. ret = hashlib.md5('@$1*(^&@^2wqe'.encode('utf-8')) #创建一个md5对象,加盐
  3. ret.update(s3.encode('utf-8')) #调用此update方法对参数进行加密 byte类型
  4. print(ret.hexdigest()) #得到加密后的结果. 定长
  5.  
  6. 如果黑客盗取到你的固定盐'@$1*(^&@^2wqe'内容
  7. 那就变成随机的盐:
  8.  
  9. username = '爽妹'
  10. password = ''
  11.  
  12. ret = hashlib.md5(username[::1].encode('utf-8'))
  13. ret.update(password.encode('utf-8'))
  14. print(ret.hexdigest())

sha 系列

hashlib.shal()             #shal与md5 级别相同 但是shal比md5 更安全一些

ret = hashlib.shal()

ret.update('123456'.encode('utf-8'))

print(ret.hexdigest())                  #7c4a8d09ca3762af61e59520943dc26494f8941b

ret = hashlib.sha512()         # 级别最高  效率低,安全性最大

ret.update('123456'.encode'utf-8')

print(ret.hexdigest())            ##得到的结果很长很长

文件校验

对于小文件可以,但是超大的文件内存受不了,

  1. def func(file_name):
  2. with open(file_name,mode = 'rb') as f1:
  3. ret = hashlib.md5()
  4. ret.update(f1.read())
  5. return ret.hexdigest()
  6.  
  7. print(func('hashlib_file'))
  8. print(func('hashlib_file1'))
  9.  
  10. s1 = 'I am 旭哥, 都别惹我.... 不服你试试'
  11. ret = hashlib.md5()
  12. ret.update(s1.encode('utf-8'))
  13. print(ret.hexdigest()) # 15f614e4f03312320cc5cf83c8b2706f
  14.  
  15. s1 = 'I am 旭哥, 都别惹我.... 不服你试试'
  16. ret = hashlib.md5()
  17. ret.update('I am'.encode('utf-8'))
  18. ret.update(' 旭哥, '.encode('utf-8'))
  19. ret.update('都别惹我....'.encode('utf-8'))
  20. ret.update(' 不服你试试'.encode('utf-8'))
  21. print(ret.hexdigest()) # 15f614e4f03312320cc5cf83c8b2706f
  22.  
  23. def func(file_name):
  24. with open(file_name,mode='rb') as f1:
  25. ret = hashlib.md5()
  26. while True:
  27. content = f1.read(1024)
  28. if content:
  29. ret.update(content)
  30. else:
  31. break
  32. return ret.hexdigest()
  33. print(func('hashlib_file'))
  34. print(func('hashlib_file1'))

hashlib 用在密文,或者文件的校验

md5:   普通的,加盐的,动态加盐的

sha:     普通的,加盐的,动态加盐的

文件的校验: 小文件,大文件

configparser  模块

  1. 帮助你操作(创建,增,删,改,查)一个配置文件
  2. 创建一个文件.
  3. import configparser
  4.  
  5. config = configparser.ConfigParser()#
  6. config["DEFAULT"] = {'ServerAliveInterval': '',
  7. 'Compression': 'yes',
  8. 'CompressionLevel': '',
  9. 'ForwardX11':'yes'
  10. }
  11. config['bitbucket.org'] = {'User':'hg'}
  12.  
  13. config['topsecret.server.com'] = {'Host Port':'','ForwardX11':'no'}
  14.  
  15. # 顺序:创建一个对象,然后将文件读到内存中,在进行相应的操作.
  16. #
  17. # print(config.sections()) # ['bitbucket.org', 'topsecret.server.com']
  18. # # #为什么没有 DEFAULT,它是特殊的,可以看做成一个全局的.
  19. # print('111' in config) # False
  20. # print('bitbucket.org' in config) # True
  21. # 判断节名是否在配置文件中 上面的方法
  22.  
  23. # 对配置文件中的节对应的项 取值
  24. # print(config['bitbucket.org']["user"]) # hg
  25. #
  26. # print(config['DEFAULT']['Compression']) #yes
  27. #
  28. # print(config['topsecret.server.com']['ForwardX11']) #no
  29. #
  30. #
  31. # print(config['bitbucket.org']) #<Section: bitbucket.org> 可迭代对象
  32. # print(config['bitbucket.org']['forwardx11']) #<Section: bitbucket.org> 可迭代对象
  33. #
  34. # for key in config['bitbucket.org']: # 注意,有default会默认default的键
  35. # print(key)
  36. # #
  37. # print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键
  38. #
  39. # print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对
  40. #
  41. # print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
  42.  
  43. # 增删改
  44. # import configparser
  45. #
  46. # config = configparser.ConfigParser()
  47. # # config.read('new2.ini')
  48. # # config.add_section('日天')
  49. # config.remove_section('bitbucket.org')
  50. # config.remove_option('topsecret.server.com',"forwardx11")
  51. #
  52. #
  53. # config.set('topsecret.server.com','k1','11111')
  54. # config.set('yuan','k2','22222')
  55. #
  56. # config.write(open('new2.ini', "w")

logging    模块

  1. log 日志:
    什么时候用到日志?
    生活中:
    1, 公司员工信息工号等等需要日志.
    2, 淘宝,京东 你的消费信息,浏览记录等等都记录日志中,个性化推荐.
    3, 头条个性化设置(爱好记录的日志中).
  2.  
  3. 工作上:
    运维人员,任何员工对服务器做过的任何操作,都会记录到日志中.
    如果你要是从事运维开发的工作,各处都需要日志.
    debug模式,需要依靠日志的.
    定时收集信息,也要记录日志.
  4.  
  5. logging 模块是辅助你记录日志的,不是自动记录日志的.
    低配版,logging
    高配版,logger 对象
  6.  
  7. 低配版::
  1. import logging
  2. 等级是一层一层升高的.
  3. logging.basicConfig(level=logging.ERROR)
  4. # level=logging.DEBUG 设置显示报错的级别.
  5. logging.debug('debug message') # 调试信息
  6. logging.info('info message') # 正常信息
  7. logging.warning('warning message') # 警告信息:代码虽然不报错,但是警告你写的不规范,必须改.
  8. logging.error('error message') # 错误信息.
  9. logging.critical('critical message') # 严重错误信息.
  10.  
  11. 用法实例:
  12. try:
  13. num = input('>>>请输入')
  14. num = int(num)
  15. except ValueError:
  16. logging.error('出现了 %s' % ValueError)
  17.  
  18. logging.basicConfig(level=logging.DEBUG,
  19. format='%(asctime)s %(filename)s (line:%(lineno)d) %(levelname)s %(message)s',
  20. )
  21. # level=logging.DEBUG 设置显示报错的级别.
  22. logging.debug('debug message') # 调试信息
  23. logging.info('info message') # 正常信息
  24. logging.warning('warning message') # 警告信息:代码虽然不报错,但是警告你写的不规范,必须改.
  25. logging.error('error message') # 错误信息.
  26. logging.critical('critical message') # 严重错误信息.
  27. logging.basicConfig(level=logging.DEBUG,
  28. format='%(asctime)s %(filename)s (line:%(lineno)d) %(levelname)s %(message)s',
  29. # datefmt='%a, %d %b %Y %H:%M:%S', # 设置时间格式
  30. filename='low_logging.log',
  31. # filemode='w',
  32. )
  33. logging.warning('warning 警告错误!!!!') # 警告信息:代码虽然不报错,但是警告你写的不规范,必须改.
  34. logging.error('error message') # 错误信息.
  35. logging.critical('critical message') # 严重错误信息.
  36. level=logging.DEBUG 设置显示报错的级别.
  37. try:
  38. num = input('>>>请输入')
  39. num = int(num)
  40. except Exception as e:
  41. logging.warning(e) # 警告信息:代码虽然不报错,但是警告你写的不规范,必须改.
  42. logging.error(e) # 错误信息.
  43. logging.critical(e) # 严重错误信息.
  1. low logging 缺点:
    # 1,写入文件 打印日志不能同时进行.
    # 2 ,写入文件时文件编码方式为gbk..

      

模块 -- 序列化 hashlib sha logging (加密 加盐 )的更多相关文章

  1. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  2. Python学习笔记(七)加密加盐

    MD5加密和加盐 Python的MD5加密 Python的hashlib模块的MD5加密,是比较简单一种加密,md5函数必须传入编译后的结果,否则会报错: Traceback (most recent ...

  3. MD5加密+加盐

    了解: MD5加密,是属于不可逆的.我们知道正常使用MD5加密技术,同一字符,加密后的16进制数是不变的,自从出现彩虹表,对于公司内部员工来说,可以反查数据,获取不可能的权限,所以出现了salt算法. ...

  4. 序列化 ,hashlib ,configparser ,logging ,collections模块

    # 实例化 归一化 初始化 序列化 # 列表 元组 字符串# 字符串# .......得到一个字符串的结果 过程就叫序列化# 字典 / 列表 / 数字 /对象 -序列化->字符串# 为什么要序列 ...

  5. 常用模块之hashlib,subprocess,logging,re,collections

    hashlib 什么是hashlib 什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,M ...

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

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

  7. python常用模块补充hashlib configparser logging,subprocess模块

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

  8. 常用模块之hashlib,configparser,logging模块

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

  9. MD5加密以及验证加密-加盐

    加密与解密算法: /// <summary> /// 签名字符串 32位 /// </summary> /// <param name="input" ...

随机推荐

  1. 打印流PrintStream

    打印流PrintStream PrintStream extends OutputStream 1.打印流的特点 只负责数据的输出,不负责数据的读取 与其他的流不同,打印流永远不会抛出IOExcept ...

  2. 编辑距离算法以及它的C#实现

    原文:https://www.cnblogs.com/shihuajie/p/5772173.html 注意,原文中有以下表述不当的地方 “扫描两字符串(n*m级的),如果:str1 == str2[ ...

  3. Java实现猜数字,附带提示功能。

    很简单的一段代码: package com.changeyd.demo; import java.util.Random;import java.util.Scanner;public class M ...

  4. (6)设计一个TimeMap

    一.描述 设计一个TimeMap,基于key value的 支持两类操作set(string key, string value, int timestamp),get(string key, int ...

  5. Linux之备份(tar)/解压与压缩(gzip,bzip2,xz)【待完善】

    [本博文,待完善] 以data原始文件为例,同tar备份,用xz压缩,实现备份->压缩整个过程的正向过程(生成.tar.xz)与其逆过程(先解压,后还原备份文件) 1.备份(tar) tar - ...

  6. ARC071D Infinite Sequence

    传送门 仔细观察可以发现,如果在一个\(> 1\)的数后面放一个\(> 1\)的数,那么后面的序列也就确定了,所以我们考虑dp出特定长度的序列,然后在后面加上能确定序列的数来贡献答案 为了 ...

  7. ubuntu下objective-c的编译和运行

    ubuntu 下编译objective-c 1.安装编译环境 sudo aptitude install build-essential gobjc gobjc++ gnustep gnustep-d ...

  8. Javascript - ExtJs - 组件 - 分页

    服务端只需要返回如下格式的字符串,ExtJs就可以解析并自动生成分页数据.  , name: "sam" }     ] } 准备: CREATE PROCEDURE [dbo]. ...

  9. tkinter模块常用参数python

    1.使用tkinter.Tk()生成主窗口(root = tkinter.Tk()) root.title("标题名")       修改窗体的名字,也可以在创建的时候使用clas ...

  10. 第二节,mnist手写字体识别

    1.获取mnist数据集,得到正确的数据格式 mnist = input_data.read_data_sets('MNIST_data',one_hot=True) 2.定义网络大小:图片的大小是2 ...