• 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)
  • 相关阅读:
    poj 3280 Cheapest Palindrome (dp)
    hdu 4359 Easy Tree DP? ( dp )
    hdu 2844 Coins (多重背包+ 二进制优化)
    三分法 讲解
    poj 1191 棋盘分割 (dp)
    hdu 4340 Capturing a country(树形 dp) (2012 MultiUniversity Training Contest 5 )
    子类和父类的构造函数
    CreateProcess执行一个控制台程序,隐藏DOS窗口
    单个字符比较
    MFC 程序入口和执行流程
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/9306182.html
Copyright © 2020-2023  润新知