• 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个')
      
  • 相关阅读:
    LeetCode 1122. Relative Sort Array (数组的相对排序)
    LeetCode 46. Permutations (全排列)
    LeetCode 47. Permutations II (全排列 II)
    LeetCode 77. Combinations (组合)
    LeetCode 1005. Maximize Sum Of Array After K Negations (K 次取反后最大化的数组和)
    LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)
    LeetCode 1219. Path with Maximum Gold (黄金矿工)
    LeetCode 1029. Two City Scheduling (两地调度)
    LeetCode 392. Is Subsequence (判断子序列)
    写程序判断系统是大端序还是小端序
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11600866.html
Copyright © 2020-2023  润新知