day 16

day 16 包 os/sys/json/loggin模块

1.包

  1. 什么是包;

    包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹

  2. 为什么要有包;

    在未来扩展模块功能时,不改变模块名和用法。提高模块设计者对模块的管理和维护的便利性

  3. 如何使用包

    1. 模块和包

      导入模块发生的三件事

      1. 创建一个包名的名称空间
      2. 执行包内的.py文件,将执行过程中产生的名字存放于名称空间中
      3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间

      导入包发生的三件事:

      1. 创建一个包的名称空间
      2. 由于包是一个文件夹,无法执行包,因此执行包下的.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于.py)
      3. 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的

      导入包就是在导入包下的.py,并且可以使用以下两种方式导入:

      1. import ...
      2. from ... import...
    2. 扩展模块功能

    02.os模块 与操作系统交互、控制文件/文件夹

    1.对文件操作

    1. 判断是否为文件

      res = os.path.isfile(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py')
      print(res)
      
    2. 删除文件remove

      os.remove(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py')
      
    3. 重命名文件

      os.rename(r'目标文件',r'新名字')
      

    2.对文件夹操作

    1. 判断是否为文件夹

      res=os.path.isdir(r'文件路径')
      print(res)
      
    2. 创建文件夹

      if not os.path.exists(r'路径') # 先判断是否有该文件
      os.mkdir(r'路径')
      
    3. 删除文件夹

      os.rmdir(r'路径')
      
    4. 列出文件夹内所有文件

      res=os.listdir(r'路径')
      print(res)
      
    5. 列出当前文件路径(__file__ pycharm独有)

      print(file) # 尽量用这个
      res = os.path.abspath(__file__) # 根据不同操作系统,更换不同的或/
      print(res)
      
    6. 列出文件夹所在的位置;通过嵌套得到上层文件夹名

      res = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
      print(res)
      
    7. 判断路径是否存在

    res = os.path.esists(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py')
    print(res)
    

    03.sys模块;与python解释器交互

    1. 最常用,当python解释器以命令行式运行时,接受多余的参数

      res = sys.argv
      print(res)
      
    2. 拿到当前导入的模块

      print(sys.modules.keys())
      
    3. 了解

      print(sys.api_version)
      
      print(sys.copyright)
      
      print(sys.version)
      
      print(sys.hexversion)
      

    04.json模块;实现跨平台数据交互,json串

    json模块可转换的内容有

    pickle模块使用方法与json模块相同

    1. 序列化;将python代码转换为json格式的字符串

      dic=[1,2,3]  
      res=json.dumps(dic)  # 存储在内存中
      print(type(res),res)
      
      # 将字典存储到.json文件中
      dic = {'a':True,'b':Fales}
      import json
      with open('text.json','w',encoding='utf-8') as fw:
        json.dump(dic,fw)
      
    2. 反序列化;将json格式的数据转换为python数据类型

      res = json.loads(res)  # 存储在内存中
      print(type(res), res)
      
      #将文件中的json窜读取出来
      with open('test.json', 'r', encoding='utf8') as fr:
          dic = json.load(fr)
          print(type(dic), dic)
      

      用json存储函数的话只能存储函数对象,无法存储函数内容

05.logging模块;生成日志

  1. 配置logger对象

    import logger
    nick_logger = logging.Logger('nick')
    json_logger = logging.Logger('jason')
    
  2. 配置日志格式

    formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s:  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p ', )
    
    formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p', )
    
    formmater3 = logging.Formatter('%(name)s %(message)s', )
    
  3. 配置handler ——>往文件打印or往终端打印

    h1 = logging.FileHandler('nick.log')
    h2 = logging.FileHandler('json.log')
    sm = logging.StreamHandler()
    
  4. 把handler绑定给logger对象

  5. nick_logger.addHandler(h1)
    nick_logger.addHandler(sm)
    json_logger.addHandler(h2)
    
  6. 直接使用

    nick_logger.info(f'nick 购买 变形金刚 4个')
    
原文地址:https://www.cnblogs.com/luocongyu/p/11600866.html