python总结:模块汇总

  • 定义:写好的代码集合,直接调用它的功能(py文件,c语言编译之后的文件,内置函数很多pass都是通过c编译的)
  • 作用:内存空间是有限的,存放在硬盘里,当需要的时候加载到内存,把丰富的功能封装在一个文件中,等用的时候,直接导入内存就可以使用
  • 分类:
    • 内置模块:python内置的一些常用模块,如json、pickle、hashlib、loggin、time、sys、os等
    • 扩展模块:第三方模块如itchat微信,beautifulsoup爬虫,django
    • 自定义模块:自己写的py文件(分模块:功能独立\防止代码过长)
  • 序列化模块:json、pickle、shelve用于方便数据网络传输,文件的读写操作 (文件中可以存储:字符串,和bytes.数据的传输:bytes类型.)
    • 序列化:将原本是字典、列表等内容转换成 双引号 表示的 序列化字符串的过程
    • 反序列化:将序列化的字符串转换成原数据类型
    • json:
      • 适用于不同编程语言之间的,支持除set之外所有的python数据类型(int,str,bool,None,list,tule,dict)转成str;
      • 优点:可以在各个语言中交互、可以直接通过网络传输,不用再转成bytes类型
      • 缺点:不能将多个序列化字符串,通过load回来,需要通过dumps将目标数据转成str,然后通过文件操作写入f.write(data),最后通过loads回来
      • import json
      • dumps loads 用于网络的传输,如微信接口的交互
        • 注:
        • 1、元组序列化后变成列表,反转回来不会变成元组,而是列表!!!
        • 2、中文型,会转成\u....bytes,如想看懂内容,加参数json.dumps(dic,ensure_ascii=False)
        • 3、json如果转dict,dict的key不能是元组,int型的key,反转回来变成字符串 '1'、dumps必须是字符串
        • 4、会序列化成双引号的字符串
        • 原数据类型转序列化字符串:ret = json.dumps(dic)
        • 序列化字符串转换成原数据类型:ret2 = json.loads(ret)
      • dump load 用于操作文件,对文件句柄的操作
        • json.dump(obj,fb) fb为文件句柄
        • json.load(fb)
      • # 用 dump load 只能写入和读取文件 一个序列化的字符串,会报错,解决方法如下:
    • pickle:
      • 只用于python语言之间的,支持python所有基础数据类型转换;
      • pickle序列化成bytes类型,json是除中文可以看懂的
      • 一样两对,4种方法
      • dic_seqStr = pickle.dumps(obj)
      • seqStr_dic = pickle.loads(str)
      • pickle.dump(obj,fb)
      • pickle.load(fb)
      • dump、load可写入多个序列化字符串,可反转load多个序列化,和json不同
    • shelve:
      • 仅python语言使用,对文件的操作
      • 写:
      • f = shelve.open(file) # 直接对文件句柄操作,可以写入文件,file不能为数字命名
      • existsing = f['key']
      • f['key'] = {"name":111, "age": 30} 以字典的形式将目标数据序列化写入文件{“key”:{"name":111, "age": 30}}
      • f.close()
      • 读:
      • f = shelve.open(file)
      • print(f['key']) # key没有报错
      • f.close()
      • 可改:
      • f['key']=new_date
      • 新增,以字典的形式新增,那么原数据必须是以字典形式写入的
      • f = shelve.open(file,writeback=True) 只有true时才能新增,不然无法新增
      • f['key']['new_key'] = 'values'
  • 文件加密模块:hashlib
    • 主要两种摘要算法:md5、sha系列
      • 特点:单向计算,无法反推明文
      • 作用:密文验证,文件校验
      • sha系列用法同md5一样,只是加密更安全,代价是效率低些
      • 密文加密:
        • 算法1:md5
          • 特点:生成定长32位的16进制数字
          • pwd = '我的密码'
          • import hashlib # 导入模块
          • obj = hashlib.md5() # 创建对象 ,括号里可加参数,在密文得基础上再加一些指定得东西,如下
          • # obj = hashlib.md5(指定增加的东西可为固定的也可为变量.encode('utf-8'))
          • obj.update(pwd.encode('utf-8')) # 调用对象方法update,对密文加密,必须时bytes类型
          • obj.hexdigest() # 得到加密结果,定长32位
      • 文件校验
        • 算法1:md5
          • 特点:可以分段/块来读,不大量占用内存
          • # 1、小文件
          • def md5_small_file(file_name):
            • with open(file_name, 'rb') as f: # 以字节的形式读,就不需要转了
            • file = f.read()
            • obj1 = hashlib.md5(file_name[::2].encode('utf-8'))
            • obj1.update(file) # file 本身就是bytes了
            • return obj1.hexdigest()
          • # 2、大文件 (如果文件大,就不能一次性都出来,md5支持,一段一段比,最后得出加密的密文)def md5_big_file(file_name):
          • def md5_big_file(file_name):
            • with open(file_name, 'rb') as f:
            • obj = hashlib.md5(file_name[::2].encode('utf-8')) # 先创建对象
            • while True:
              • file_site = f.read(1024) # 循环每次1024个字节
              • if file_site:
                • obj.update(file_site)
              • else:
                • return obj.hexdigest()
  • 日志记录模块:logging
    • 作用:在逻辑容易出错位置手动添加日志功能,记录报错信息到文件,以便于排错
    • 特点1:非自动记录,为人工指定位置,指定报错信息内容
    • 特点2:默认将日志打印到标准输出中,级别为>=warning,可以调整
    • 特点3:默认记录和输出格式为 日志级别warning:日志器名root:信息内容
    • 特点4:默认写入文件是追加模式,可以调整
    • 缺点:默认情况下不能同时将日志信息输出和写入文件,只能二选一,可以调整
    • 提供五种模式:
      • 1、logging.debug('message') # 自定义的排错信息
      • 2、logging.info('message') # 自定义的正常信息
      • 3、logging.warning('message') # 自定义的警告信息,程序可以运行,但要进行修改,不符合规范
      • 4、logging.error('message') # 自定义的错误信息
      • 5、logging.critical('message') # 自定义的严重错误信息
      • 注:logging.log(level,msg) # 自定义等级的日志信息
    • low版:无法同时文件及控制台都显示
      • 可以调整记录日志级别、记录格式、是否覆盖写还是追加写
      • logging.basicConfig( level=logging.DEBUG, # 指定默认日志器的日志级别
        • filename='log.log' , # 指定写入的文件名(一旦指定了文件,没有其他设置就无法标准输出了)
        • filemode = 'w' , # 指定文件打开方式,默认a
        • format = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s' # 指定日志显示得格式
        • datefmt= '%a %d %b %Y %H:%M:%S', # 指定日期的时间格式,需与format的‘%(asctime)s’一起才有效
        • stream = sys.stdout) # 指定输出到屏幕的方式,sys.stdout,sys.stderr,网络stream,不能同filename一起
    • high版:通过logger对象操作,无极限定制
      • 1、创建对象
        • obj = logging.getLoger(__name__)
      • 2、指定全局日志级别
      • 3、创建handler 
        • fh = logging.FileHandler()或sh =loggin.StreamHandler()
      • 4、指定handler的日志级别(必须高于logger级别)
        • fh.setLevel()
      • 5、创建handler的日志格式 (可创建多个不同的格式)
        • custom_format = logging.Formatter()
      • 6、指定handler的日志格式 
        • handlerX.setFormatter(custom_format)
      • 7、日志器logger调用handler处理器
        • obj.addHandler(handler)
      • 8、配置各个日志级别的日志记录message
        • longging.debug(msg)
posted @ 2018-07-13 17:23  Alive_2020  阅读(924)  评论(0编辑  收藏  举报