[Python][认识标准库][标准库][第三方库]详细讲解


1.标准库

1.认识标准库

  • Python官方文档上可以看到这些库的内容
  • 简单来说,主要包含
    • 内置函数 (如 print, input 等)
    • 内置类型 (针对 int, str, bool, list, dict 等类型内置的操作)
    • 文本处理
    • 时间日期
    • 数学计算
    • 文件目录
    • 数据存储(操作数据库,数据序列化等)
    • 加密解密
    • 操作系统相关
    • 并发编程相关(多进程,多线程,协程,异步等)
    • 网络编程相关
    • 多媒体相关(音频处理,视频处理等)
    • 图形化界面相关
    • ……

2.使用import导入模块

  • Python通过模块来体现""
  • 使用import可以导入标准库的一个模块
    # 导入模块
    import [模块名]
    
    # 从 模块 导入 类型
    from [模块名] import [类型名]
    
    # 给模块起别名,方便后续使用
    import [模块名] as [别名]
    
  • 模块:一个单独的.py文件
    • 使用import语句可以把这个外部的.py文件导入到当前.py文件中,并执行其中的代码

2.代码示例

1.日期计算

  • 输入任意的两个日期,计算两个日期之间隔了多少天
    • 使用import语句导入标准库的datetime模块
    • 使用datetime.datetime构造两个日期,参数使用年, 月, 日这样的格式
    • 两个日期对象相减,即可得到日期的差值
      import datetime
      
      date1 = datetime.datetime(2024, 5, 2)
      date2 = datetime.datetime(2024, 3, 30)
      
      print(date1 - date2)
      
  • 关于datetime的更多操作,可以参考官方文档

2.字符串操作

  • 字符串是Python的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用
  • 字符串的更多操作,可以参考官方文档

1.翻转单词顺序

  • 题目链接
  • 操作步骤
    • 使用strsplit()进行字符串切分,指定空格为分隔符,返回结果是一个列表
    • 使用列表的reverse()进行逆序
    • 使用strjoin()进行字符串拼接,把列表中的内容进行合并
      def ReverseWords(s):
          tokens = s.split(' ')
          tokens.reverse()
          return ' '.join(tokens)
              
      print(reverseWords('I am a student.'))
      

2.旋转字符串

  • 题目链接
  • 操作步骤
    • 使用len()求字符串的长度,如果长度不相同,则一定不能旋转得到
    • s和自己进行拼接,然后直接使用in方法来判定goal是否是s + s的子串
      def RotateString(s, goal):
          return len(s) == len(goal) and goal in s + s
          
      print(rotateString('abcde', 'cdeab'))
      

3.统计是给定字符串前缀的字符串数目

  • 题目链接
  • 操作步骤
    • 依次遍历words中的字符串
    • 直接使用字符串的startswith()即可判定当前字符串是否是s的前缀
      def CountPrefixes(words, s):
          res = 0   # 符合要求字符串个数
          for word in words:
              if s.startswith(word):
                  res += 1
          return res
      
      print(countPrefixes(["a","b","c","ab","bc","abc"], "abc"))
      

3.文件查找工具

  • 指定一个待搜索路径,同时指定一个待搜索的关键字
  • 在待搜索路径中查找是否文件名中包含这个关键字
    • 使用os.walk()即可实现目录的递归遍历
    • os.walk()返回一个三元组,分别是当前路径 ,当前路径下包含的目录名(多个),当前路径下包含的文件名(多个)
      import os
      
      inputPath = input('请输入待搜索路径: ')
      pattern = input('请输入待搜索关键词: ')
      
      for dirpath, dirnames, filenames in os.walk(inputPath):
          for f in filenames:
              if pattern in f:
                  print(f'{dirpath}/{f}')
      
  • os模块的更多操作,参考官方文档

3.第三方库

1.使用 pip

  • pip是Python内置的包管理器
    • Python官方提供了一个网站PyPI,来收集第三方库
  • 安装第三方库pip install [库名]
    • 安装成功后,即可使用import导入相关模块,即可进行使用
  • 注意
    • 如果使用pip安装完第三方库之后,在PyCharm中仍然提示找不到对应的模块,则检查Settings -> Project -> Python Interpreter,看当前Python解释器设置的是否正确
    • 如果一个机器上安装了多个版本的Python,容易出现这种情况

2.示例:生成二维码

  • 通过搜索引擎,确定使用哪个库
    • 得知qrcode这个库,可以用来生成二维码
  • 在PyPi上搜索qrcode
    • pip install qrcode[pil]
  • 使用:文档上有介绍使用方法
    import qrcode
    
    img = qrcode.make('SnowK')
    img.save('SnowK.png')
    

3.示例:操作Excel

  • 读取Excel可以使用xlrd模块,文档地址
  • 修改Excel可以使用xlwt模块,文档地址
  • 下面以xlrd为例
  • 安装pip install xlrd==1.2.0
  • 编写代码
    • 使用open_workbook()打开一个Excel文件
    • 使用xlsx.sheet_by_index(0)获取到0号标签页
    • 使用table.nrows()获取到表格的行数
    • 使用table.cell_value(row, col)获取到表格中row, col位置的元素值
      import xlrd
      
      # 1. 打开 xlsx 文件
      xlsx = xlrd.open_workbook('D:/test.xlsx')
      
      # 2. 获取 0 号标签页. (当前只有一个标签页)
      table = xlsx.sheet_by_index(0)
      
      # 3. 获取总行数
      nrows = table.nrows
      
      # 4. 遍历数据
      count = 0
      total = 0
      for i in range(1, nrows):
          # 使用 cell_value(row, col) 获取到指定坐标单元格的值.
          classId = table.cell_value(i, 1)
          if classId == 100:
              total += table.cell_value(i, 2)
              count += 1
              
      print(f'平均分: {total / count}')
      

4.示例:程序员鼓励师

  • 功能:监听键盘按键,每按键20下,就自动播放一个音频,鼓励一下辛苦搬砖的自己
  • 安装第三方依赖
    • pynput用于监听键盘按键,注意版本不要用最新
    • playsound用于播放音频
      pip install pynput==1.6.8
      pip install playsound==1.2.2
      
  • 准备音频文件,放到和.py代码同级目录中
  • 编写代码
    • 使用from import的格式直接导入模块中的指定对象/函数
    • 使用keyboard.Listener()监听键盘按键,其中on_release()会在释放按键时被调用
    • 使用listener.start()启动监听器
    • 为了防止程序直接退出,使用listener.join()让程序等待用户按键
    • 使用count计数,每隔20次,调用playsound()播放音频文件
      from pynput import keyboard
      from playsound import playsound
      
      count = 0
      
      def OnRelease(key):
          print(key)
          global count
          count += 1
          if count % 20 == 0:
              playsound('ding.mp3')
              
      listener = keyboard.Listener(on_release=OnRelease) # 关键字参数传参
      listener.start()
      listener.join()
      
  • 改进代码:上述代码在执行过程中,会感觉到播放音频会导致按键卡顿,可以使用多线程解决这个问题
    • 使用threading.Thread引入多线程类
    • 使用Thread的构造函数来构造一个线程
      • target表示线程要执行的任务
      • args表示target中要调用函数的参数
    • 使用Thread.start()启动线程
from pynput import keyboard
from playsound import playsound
from threading import Thread

count = 0
def OnRelease(key):
    print(key)
    global count
    count += 1
    if count % 10 == 0:
        t = Thread(target=playsound, args=('ding.mp3',))
        t.start()

listener = keyboard.Listener(on_release=OnRelease)
listener.start()
listener.join()
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DieSnowK

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

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

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

打赏作者

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

抵扣说明:

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

余额充值