简明 Python 教程(第12章 Python标准库)

Python标准库是Python语言的核心组成部分,它包含了大量的模块,用于处理文件、数据编码、数学运算、网络通信等任务。Python标准库是随Python解释器一起发布的一系列模块,提供了许多内置的功能和工具,帮助开发者扩展Python程序的能力。使得开发者能够快速实现各种功能。

重要模块

  1. sys:提供了与Python解释器密切相关的函数和变量。例如,sys.argv用于访问命令行参数,sys.exit()用于退出程序。

    import sys
    
    def readfile(filename):
     '''Print a file to the standard output.'''
     with open(filename) as f:
        while True:
           line = f.readline()
           if len(line) == 0:
              break
           print(line) # 打印文件内容
    
    
    if len(sys.argv) < 2:
        print('No action specified.')
        sys.exit()
    if sys.argv[1].startswith('--'):
        option = sys.argv[1][2:]
        
        if option == 'version':
           print('Version 1.2')
        elif option == 'help':
           print('''
                This program prints files to the standard output.
                Any number of files can be specified.
                Options include:
                --version : Prints the version number
                --help : Display this help
                 ''')
        else:
           print('Unknown option.')
        sys.exit()
    else:
     for filename in sys.argv[1:]:
        readfile(filename)
    
    

    这段Python代码的功能是读取并打印指定文件的内容。首先,它会检查命令行参数的个数,如果没有指定任何参数,则输出提示信息并退出程序。如果指定了参数,它会检查第一个参数是否以"--"开头,如果是,则判断该参数是"--version"还是"--help",并分别输出相应的版本信息和帮助信息。如果指定了文件名,则逐个读取并打印这些文件的内容。

    sys.version字符串给你提供安装的Python的版本信息。sys.version_info元组则提供一个更简单的方法来使你的程序具备Python版本要求功能。
    import sys
    
    print(sys.version)
    print(sys.version_info)
    
    #### 输出 python的版本
    3.9.16 | packaged by conda-forge | (main, Feb  1 2023, 21:28:38) [MSC v.1929 64 bit (AMD64)]
    
    sys.version_info(major=3, minor=9, micro=16, releaselevel='final', serial=0)
  2. os:提供了许多与操作系统交互的函数。例如,os.path用于处理文件路径,os.environ用于访问环境变量。
     

    import os
    
    print(os.name) # 读取当前的操作系统
    print(os.getcwd()) # 函数得到当前工作目录,即当前Python脚本工作的目录路径。
    print(os.getenv('PATH')) # 用来读取环境变量。
    # os.putenv('FOO', '1') # 用来设置环境变量
    print(os.listdir('E:\\')) # 返回指定目录下的所有文件和目录名
    # os.remove('test.txt') # 删除指定文件
    os.system('mkdir today') # 执行shell命令
    print(os.linesep) # 给出当前平台使用的行终止符 windows '\r\n'
    print(os.path.split('E:\\test.txt')) # 返回一个路径的目录名和文件名
    

  3. datetime:提供了日期和时间处理的功能。例如,datetime.datedatetime.datetime用于表示日期和时间。

    from datetime import datetime, timedelta
    
    # 创建一个当前时间的 datetime 对象
    now = datetime.now()
    
    # 打印当前时间
    print("当前时间:", now)
    
    # 创建一个明天的 datetime 对象
    tomorrow = now + timedelta(days=1)
    
    # 打印明天的时间
    print("明天的时间:", tomorrow)
    
    # 创建一个昨天的 datetime 对象
    yesterday = now - timedelta(days=1)
    
    # 打印昨天的时间
    print("昨天的时间:", yesterday)
    
    # 创建一个指定日期和时间的 datetime 对象
    specific_date_time = datetime(2023, 10, 10, 15, 30, 0)
    
    # 打印指定日期和时间的 datetime 对象
    print("指定日期和时间:", specific_date_time)
    
    # 将 datetime 对象转换为字符串
    formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
    
    # 打印格式化后的当前时间
    print("格式化后的当前时间:", formatted_now)
    
    # 将字符串转换为 datetime 对象
    formatted_datetime = datetime.strptime("2023-10-10 15:30:00", "%Y-%m-%d %H:%M:%S")
    
    # 打印格式化后的 datetime 对象
    print("格式化后的 datetime 对象:", formatted_datetime)

    在上述示例中,我们首先导入了datetime模块,并创建了一个当前时间的datetime对象now。然后,我们使用timedelta对象来创建明天和昨天的datetime对象,并打印它们的时间。接下来,我们创建了一个指定日期和时间的datetime对象,并打印它的时间。然后,我们使用strftime方法将datetime对象转换为字符串,并打印格式化后的当前时间。最后,我们使用strptime方法将字符串转换为datetime对象,并打印格式化后的datetime对象。

     

    请注意,strftime方法和strptime方法中的日期和时间格式可以根据需要进行调整。strftime方法用于将datetime对象转换为字符串,而strptime方法用于将字符串转换为datetime对象。

  4. math:提供了数学运算和常数。例如,math.sqrt()用于计算平方根,math.pi是圆周率的值。

  5. json:用于处理JSON(JavaScript Object Notation)数据格式。提供了json.dumps()json.loads()等函数来序列化和反序列化JSON数据。
     

    import json
    
    # 定义一个 Python 对象
    data = {
        "name": "John Doe",
        "age": 30,
        "city": "New York"
    }
    
    # 将 Python 对象转换为 JSON 字符串
    json_data = json.dumps(data)
    
    # 打印 JSON 字符串
    print("JSON 字符串:", json_data)
    
    # 将 JSON 字符串转换为 Python 对象
    parsed_data = json.loads(json_data)
    
    # 打印解析后的 Python 对象
    print("解析后的 Python 对象:", parsed_data)

  6. re:提供了正则表达式的支持。可以用来搜索、匹配和替换文本中的模式。
     

    import re
    
    # 定义一个正则表达式模式
    pattern = r"([a-zA-Z0-9_.+-]+)@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,}"
    
    # 定义要匹配的文本
    text = "example@example.com"
    
    # 使用 re 模块的 match 函数进行匹配
    match = re.match(pattern, text)
    
    # 如果匹配成功,打印匹配结果
    if match:
        print("匹配结果:", match.group())
    else:
        print("匹配失败")

    在上述示例中,我们首先定义了一个正则表达式模式pattern,用于匹配电子邮件地址。然后,我们定义了要匹配的文本text,即一个电子邮件地址。接下来,我们使用re模块的match函数进行匹配,并将匹配结果存储在变量match中。最后,我们检查match是否为 None,如果match不为 None,说明匹配成功,我们打印出匹配结果。如果match为 None,说明匹配失败,我们打印出相应的提示信息。

     

    请注意,正则表达式模式中的r前缀表示原始字符串,它可以防止转义字符被解释为特殊字符。在正则表达式模式中,+表示匹配前面的元素一次或多次,()表示捕获组,用于提取匹配结果中的子表达式。@表示匹配@字符,\.表示匹配.字符,\w表示匹配任意字母、数字或下划线,\d表示匹配任意数字,{2,}表示匹配前面的元素至少两次。

     

    这只是re模块的一个简单示例,re模块还提供了许多其他函数和类,用于进行更复杂的正则表达式操作。你可以参考 Python 的官方文档以获取更多信息。

  7. logging:提供了灵活的记录事件、错误、警告和调试信息的日志系统。
     

    import logging
    
    # 创建一个 Logger 对象
    logger = logging.getLogger(__name__)
    
    # 设置日志级别
    logger.setLevel(logging.DEBUG)
    
    # 创建一个 FileHandler 对象,用于将日志记录到文件中
    file_handler = logging.FileHandler('example.log')
    
    # 设置 FileHandler 的格式
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    
    # 将 FileHandler 添加到 Logger 对象中
    logger.addHandler(file_handler)
    
    # 记录一条 DEBUG 级别的日志
    logger.debug('这是一条 DEBUG 级别的日志')
    
    # 记录一条 INFO 级别的日志
    logger.info('这是一条 INFO 级别的日志')
    
    # 记录一条 WARNING 级别的日志
    logger.warning('这是一条 WARNING 级别的日志')
    
    # 记录一条 ERROR 级别的日志
    logger.error('这是一条 ERROR 级别的日志')
    
    # 记录一条 CRITICAL 级别的日志
    logger.critical('这是一条 CRITICAL 级别的日志')

    在上述示例中,我们首先导入了logging模块,并创建了一个Logger对象logger。然后,我们使用setLevel方法设置了日志级别为DEBUG,表示只记录DEBUG及以上级别的日志。接下来,我们创建了一个FileHandler对象file_handler,用于将日志记录到文件中,并使用setFormatter方法设置了FileHandler的格式。最后,我们将file_handler添加到Logger对象中,并使用不同的方法记录了不同级别的日志。

     

    请注意,logging.FileHandler的第一个参数'example.log'是要写入的日志文件的路径。如果该文件不存在,logging.FileHandler会自动创建它。如果你希望将日志记录到标准输出(控制台),可以使用logging.StreamHandler

  8. random:提供了生成伪随机数的工具。可以用来生成各种分布的随机数。
     

    import random
    
    # 生成一个 0 到 1 之间的随机浮点数
    random_float = random.random()
    
    # 生成一个指定范围内的随机整数
    random_integer = random.randint(1, 10)
    
    # 生成一个指定范围内的随机浮点数
    random_float_range = random.uniform(1, 10)
    
    # 从一个列表中随机选择一个元素
    random.choice(['苹果', '香蕉', '橙子'])
    
    # 从一个列表中随机选择多个元素
    random.sample(['苹果', '香蕉', '橙子', '草莓'], 2)
    
    # 生成一个指定长度的随机字符串
    random_string = ''.join(random.choice('abcdefghijklmnopqrstuvwxyz') for i in range(10))
    
    # 打乱一个列表的顺序
    random.shuffle(['苹果', '香蕉', '橙子', '草莓'])
    
    print(random_float)
    print(random_integer)
    print(random_float_range)
    print(random.choice(['苹果', '香蕉', '橙子']))
    print(random.sample(['苹果', '香蕉', '橙子', '草莓'], 2))
    print(random_string)
    print(random.shuffle(['苹果', '香蕉', '橙子', '草莓']))

    在上述示例中,我们首先导入了random模块,并使用了其中的一些函数来生成随机数。random.random()函数生成一个 0 到 1 之间的随机浮点数。random.randint(a, b)函数生成一个指定范围内的随机整数,其中 a 和 b 分别是范围的下限和上限。random.uniform(a, b)函数生成一个指定范围内的随机浮点数,其中 a 和 b 分别是范围的下限和上限。random.choice(seq)函数从序列 seq 中随机选择一个元素。random.sample(seq, k)函数从序列 seq 中随机选择 k 个元素,返回一个新的列表。 ''.join(random.choice('abcdefghijklmnopqrstuvwxyz') for i in range(10))使用生成器表达式生成一个指定长度的随机字符串。random.shuffle(seq)函数打乱序列 seq 的顺序。

     

    这些函数可以帮助你在 Python 程序中生成各种类型的随机数,以满足不同的需求。

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lontran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值