• python中常用的内置模块


    内置模块(一)

    Python内置的模块有很多,我们也已经接触了不少相关模块,接下来咱们就来做一些汇总和介绍。

    内置模块有很多 & 模块中的功能也非常多,我们是没有办法注意全局给大家讲解,在此我会整理出项目开发最常用的来进行讲解。

    os

    import os
    
    # 1. 获取当前脚本绝对路径
    """
    abs_path = os.path.abspath(__file__)
    print(abs_path)
    """
    
    # 2. 获取当前文件的上级目录
    """
    base_path = os.path.dirname( os.path.dirname(路径) )
    print(base_path)
    """
    
    # 3. 路径拼接
    """
    p1 = os.path.join(base_path, 'xx')
    print(p1)
    
    p2 = os.path.join(base_path, 'xx', 'oo', 'a1.png')
    print(p2)
    """
    
    # 4. 判断路径是否存在
    """
    exists = os.path.exists(p1)
    print(exists)
    """
    
    # 5. 创建文件夹
    """
    os.makedirs(路径)
    """
    """
    path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
    if not os.path.exists(path):
        os.makedirs(path)
    """
    
    # 6. 是否是文件夹
    """
    file_path = os.path.join(base_path, 'xx', 'oo', 'uuuu.png')
    is_dir = os.path.isdir(file_path)
    print(is_dir) # False
    
    folder_path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
    is_dir = os.path.isdir(folder_path)
    print(is_dir) # True
    
    """
    
    # 7. 删除文件或文件夹
    """
    os.remove("文件路径")
    """
    """
    path = os.path.join(base_path, 'xx')
    shutil.rmtree(path)
    """
    • listdir,查看目录下所有的文件

    • walk,查看目录下所有的文件(含子孙文件)

      import os
      
      """
      data = os.listdir("/Users/feimouren/PycharmProjects/luffyCourse/day14/commons")
      print(data)
      # ['convert.py', '__init__.py', 'page.py', '__pycache__', 'utils.py', 'tencent']
      # 无法查看文件夹中子文件夹中的文件
      """ """ 要遍历一个文件夹下的所有文件,例如:遍历文件夹下的所有mp4文件
      data获取到的是一个生成器,在编列生成器时,会获取到三个元素,1.文件夹路径,2.文件夹中的文件夹,3.文件
      在遍历时,如果文件夹中还有文件夹,那么会继续遍历这个文件夹同样会获取三个元素。
      """ data = os.walk("/Users/wupeiqi/Documents/视频教程/飞Python/mp4") for path, folder_list, file_list in data: for file_name in file_list: file_abs_path = os.path.join(path, file_name) ext = file_abs_path.rsplit(".",1)[-1] if ext == "mp4": print(file_abs_path)

    shutil

    import shutil
    
    # 1. 删除文件夹
    """
    path = os.path.join(base_path, 'xx')
    shutil.rmtree(path)
    """
    
    # 2. 拷贝文件夹
    """
    shutil.copytree("/Users/wupeiqi/Desktop/图/csdn/","/Users/wupeiqi/PycharmProjects/CodeRepository/files")
    """
    
    # 3.拷贝文件
    """
    shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/")
    shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/x.png")
    """
    
    # 4.文件或文件夹重命名
    """
    shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/xxxx.png")
    shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/files","/Users/wupeiqi/PycharmProjects/CodeRepository/images")
    """
    
    # 5. 压缩文件
    """
    # base_name,压缩后的压缩包文件
    # format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar".
    # root_dir,要压缩的文件夹路径
    """
    # shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files')
    
    
    # 6. 解压文件
    """
    # filename,要解压的压缩包文件
    # extract_dir,解压的路径
    # format,压缩文件格式
    """
    # shutil.unpack_archive(filename=r'datafile.zip', extract_dir=r'xxxxxx/xo', format='zip')

    sys

    import sys
    
    # 1. 获取解释器版本
    """
    print(sys.version)
    print(sys.version_info)
    print(sys.version_info.major, sys.version_info.minor, sys.version_info.micro)
    """
    
    # 2. 导入模块路径
    """
    print(sys.path)
    """

    random

    import random
    
    # 1. 获取范围内的随机整数
    v = random.randint(10, 20)
    print(v)
    
    # 2. 获取范围内的随机小数
    v = random.uniform(1, 10)
    print(v)
    
    # 3. 随机抽取一个元素
    v = random.choice([11, 22, 33, 44, 55])
    print(v)
    
    # 4. 随机抽取多个元素
    v = random.sample([11, 22, 33, 44, 55], 3)
    print(v)
    
    # 5. 打乱顺序
    data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    random.shuffle(data)
    print(data)

    hashlib

    import hashlib
    
    hash_object = hashlib.md5()
    hash_object.update("武沛齐".encode('utf-8'))
    result = hash_object.hexdigest()
    print(result)
    import hashlib
    
    hash_object = hashlib.md5("iajfsdunjaksdjfasdfasdf".encode('utf-8'))
    hash_object.update("武沛齐".encode('utf-8'))
    result = hash_object.hexdigest()
    print(result)
    """
    在加密时,为了防止密码被撞出来,通常会在第二行代码处加盐
    ,即添加我们自己知道的随机的字符串,这样就可以防止别人破解密码
    """

    configparser

    Python中的文件 - J.FengS - 博客园 (cnblogs.com)

    xml

    Python中的文件 - J.FengS - 博客园 (cnblogs.com)

    json

    json模块,是python内部的一个模块,可以将python的数据格式 转换为json格式的数据,也可以将json格式的数据转换为python的数据格式。

    json格式,是一个数据格式(本质上就是个字符串,常用语网络数据传输)

    # Python中的数据类型的格式
    data = [
        {"id": 1, "name": "飞某人", "age": 18},
        {"id": 2, "name": "alex", "age": 18},
        ('feimouren',123),
    ]
    
    # JSON格式
    value = '[{"id": 1, "name": "飞某人", "age": 18}, {"id": 2, "name": "alex", "age": 18},["feimouren",123]]'
    • json格式的作用?
      跨语言数据传输,例如:
          A系统用Python开发,有列表类型和字典类型等。
          B系统用Java开发,有数组、map等的类型。
      
          语言不同,基础数据类型格式都不同。
          
          为了方便数据传输,大家约定一个格式:json格式,每种语言都是将自己数据类型转换为json格式,也可以将json格式的数据转换为自己的数据类型。

    • Python数据类型与json格式的相互转换:

      • 数据类型 -> json ,一般称为:序列化

        # 实际就是将python的语法代码变成了字符串
        import json
        
        data = [
            {"id": 1, "name": "飞某人", "age": 18},
            {"id": 2, "name": "alex", "age": 18},
        ]
        
        res = json.dumps(data)  # 里面的中文字符会根据unicode编码将中文转换成16进制
        print(res) # [{"id": 1, "name": "\u98de\u67d0\u4eba", "age": 18}, {"id": 2, "name": "alex", "age": 18}]
        
        res = json.dumps(data, ensure_ascii=False)     # 设置参数为False后,会保留中文
        print(res) # [{"id": 1, "name": "飞某人", "age": 18}, {"id": 2, "name": "alex", "age": 18}]
      • json格式 -> 数据类型,一般称为:反序列化
        """ 反序列化,将特定的字符串变成python中有语法意义的代码"""
        import json
        
        data_string = '[{"id": 1, "name": "飞某人", "age": 18}, {"id": 2, "name": "alex", "age": 18}]'
        
        # 将字符串data_string变成了data_list列表
        data_list = json.loads(data_string)
        print(type(data_list), data_list)
        for x in data_list:
            print(x)
        """
        运行结果:
        <class 'list'> [{'id': 1, 'name': '飞某人', 'age': 18}, {'id': 2, 'name': 'alex', 'age': 18}]
        {'id': 1, 'name': '飞某人', 'age': 18}
        {'id': 2, 'name': 'alex', 'age': 18}
        """
    • 类型要求

      • python的数据类型转换为 json 格式,对数据类型是有要求的,默认只支持:
            +-------------------+---------------+
            | Python            | JSON          |
            +===================+===============+
            | dict              | object        |
            +-------------------+---------------+
            | list, tuple       | array         |
            +-------------------+---------------+
            | str               | string        |
            +-------------------+---------------+
            | int, float        | number        |
            +-------------------+---------------+
            | True              | true          |
            +-------------------+---------------+
            | False             | false         |
            +-------------------+---------------+
            | None              | null          |
            +-------------------+---------------+

        其他类型如果想要支持,需要自定义JSONEncoder才能实现

        import json
        from decimal import Decimal
        from datetime import datetime
        
        data = [
            {"id": 1, "name": "武沛齐", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()},
            {"id": 2, "name": "alex", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()},
        ]
        
        
        class MyJSONEncoder(json.JSONEncoder):
            def default(self, o):
                if type(o) == Decimal:
                    return str(o)
                elif type(o) == datetime:
                    return o.strftime("%Y-%M-%d")
                return super().default(o)
        
        
        res = json.dumps(data, cls=MyJSONEncoder)
        print(res)
    • 其他功能

        json模块中常用的是:

      • json.dumps,序列化生成一个字符串。
      • json.loads,发序列化生成python数据类型。
      • json.dump,将数据序列化并写入文件(不常用)
      • json.load,读取文件中的数据并反序列化为python的数据类型(不常用)
        """将序列化的代码写入文件中使用dump"""
        import json
        
        data = [
            {"id": 1, "name": "飞某人", "age": 18},
            {"id": 2, "name": "alex", "age": 18},
        ]
        
        file_object = open('xxx.json', mode='w', encoding='utf-8')
        json.dump(data, file_object)  # 将data列表进行序列化,写入file_object.json文件中
        file_object.close()
        """将文件中的特定字符串反序列化成python中的代码"""
        import json
        file_object = open('xxx.json', mode='r', encoding='utf-8')
        data_list = json.load(file_object)
        print(type(data_list),data_list)
        """
        运行结果:
        <class 'list'> [{'id': 1, 'name': '飞某人', 'age': 18}, {'id': 2, 'name': 'alex', 'age': 18}]
        """ 

     

    time

    • UTC/GMT:世界时间

    • 本地时间:本地时区的时间。

      import time
      
      # 获取当前时间的时间戳:自1970-1-1 00:00到现在的时间的时间差(秒)
      t = time.time()
      print(t)    # 1643260394.4218106
      
      # 获取当前地区的时区,因为我们的时间比UTC时间要快,所以得出来的是个负数
      # t1/60/60 = -8 表示我们在东八区, t+t1 = 当前UTC的时间
      t1 = time.timezone
      print(t1)           # -28800
      print(t1/60/60)     # -8.0

    datetime

    在平时开发过程中的时间一般是以为如下三种格式存在:

    •  datetime
      from datetime import datetime, timezone, timedelta
      
      # 获取当前时间,获取的时间的数据类型是datetime,并不是一个字符串
      t = datetime.now()
      print(t, type(t))    # 2022-01-27 13:20:07.358746 <class 'datetime.datetime'>
      
      # 获取当前UTC的时间
      t = datetime.utcnow()
      print(t)            # 2022-01-27 05:22:09.672516
      
      # 获取指定时区的当前时间
      t = timezone(timedelta(hours=8))
      t1 = datetime.now(t)
      print(t1)        # 2022-01-27 13:25:56.842880+08:00
      # datetime类型 +/- timedelta类型   (加减都行)
      from datetime import datetime, timedelta, timezone
      t = datetime.now()
      t1 = timedelta(days=140, hours=50, minutes=120, seconds=120)
      print(t-t1)  # 在现在时间的基础上减去140天50小时120分钟120秒,天时分秒这些参数可以根据需求省略
      print(t+t1)  # 在现在时间的基础上减去140天50小时120分钟120秒,天时分秒这些参数可以根据需求省略
      
      # datetime之间相减,计算间隔时间(不能相加)、可以比较
      # datetime类型 - datetime类型
      # datetime类型 比较 datetime类型
      t1 = datetime.now()
      t2 = datetime.utcnow()
      t = t1 - t2
      print(t)                    # 8:00:00   本时区时间减去utc时间的差值(小时)
      print(t.days, t.seconds)    # 0 28800  只能显示天与秒
    • 字符串

      from datetime import datetime
      """字符串转化为datetime格式时间"""
      text = "2022-1-27"
      text1 = "2021-1-27 12:54:25"
      t = datetime.strptime(text, "%Y-%m-%d") # 2022-01-27 00:00:00 <class 'datetime.datetime'>
      t1 = datetime.strptime(text1, "%Y-%m-%d %H:%M:%S") # 2021-01-27 12:54:25 <class 'datetime.datetime'>
      print(t, type(t))
      print(t1, type(t1))
      
      t2 = datetime.now()
      t3 = t2.strftime("%Y-%m-%d %H:%M:%S")
      print(t3)   # 2022-01-27 17:56:12
    • 时间戳

      from datetime import datetime
      import time
      t1 = time.time()
      t2 = datetime.fromtimestamp(t1)  # 将时间戳转化为datetime时间
      print(t2)   # 2022-01-27 18:02:30.742881
      
      t1 = datetime.now()
      t2 = t1.timestamp()     # 将datetime时间转换为时间戳
      print(t2)       # 1643277881.572226

    符号

    说明

    %y

    两位数的年份表示(00-99)

    %Y

    四位数的年份表示(000-9999)

    %m

    月份(01-12)

    %d

    月内中的一天(0-31)

    %H

    24小时制小时数(0-23)

    %I

    12小时制小时数(01-12)

    %M

    分钟数(00=59)

    %S

    秒(00-59)

    %a

    本地简化星期名称

    %A

    本地完整星期名称

    %b

    本地简化的月份名称

    %B

    本地完整的月份名称

    %c

    本地相应的日期表示和时间表示

    %j

    年内的一天(001-366)

    %p

    本地A.M.或P.M.的等价符

    %U

    一年中的星期数(00-53)星期天为星期的开始

    %w

    星期(0-6),星期天为星期的开始

    %W

    一年中的星期数(00-53)星期一为星期的开始

    %x

    本地相应的日期表示

    %X

    本地相应的时间表示

    %Z

    当前时区的名称

    %%

    %号本身

     

  • 相关阅读:
    框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
    框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
    框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
    框架源码系列八:Spring源码学习之Spring核心工作原理(很重要)
    框架源码系列七:Spring源码学习之BeanDefinition源码学习(BeanDefinition、Annotation 方式配置的BeanDefinition的解析)
    框架源码系列六:Spring源码学习之Spring IOC源码学习
    框架源码系列五:学习源码的方法(学习源码的目的、 学习源码的方法、Eclipse里面查看源码的常用快捷键和方法)
    框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)
    框架源码系列三:手写Spring AOP(AOP分析、AOP概念学习、切面实现、织入实现)
    框架源码系列二:手写Spring-IOC和Spring-DI(IOC分析、IOC设计实现、DI分析、DI实现)
  • 原文地址:https://www.cnblogs.com/fjfsu/p/15845090.html
Copyright © 2020-2023  润新知