python学习之基本库/第三方库的认识和学习

发布于:2025-09-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

        python之所以获得今天的知名度除了除了简介明了的语法便于记忆学习外,更支持它走到今天的便是它那丰富的生态,也就是python中丰富的库。

        python的库作用繁多,可以应用于数据分析、深度学习、绘图、web开发等方方面面的功能。

        python的第三方库资料繁多,知识点复杂,这里不做过多的内容阐述,想深入了解的可以参考这个网站:Python 标准库 — Python 3.13.7 文档

        接下来我们就简单的python第三方库的介绍和使用

        相关代码已经提交至作者的个人gitee:楼田莉子/Python 学习喜欢请支持一下谢谢

目录

导入一个模块

标准库

        代码示例1:日期计算

        力扣习题:字符串中的单词翻转

        力扣习题:旋转字符串

代码思路

3、统计是给定字符串前缀的字符串个数

        代码示例2:文本检查工具

第三方库

        pip

        示例:二维码生成

        在 PyPI 上搜索 qrcode

        示例:excel操控脚本

        示例:程序员鼓励机


导入一个模块

        我们将使用如下的代码来导入一个模块,其作用类似于C/C++中包含头文件

import [模块名]

        所谓 "模块" , 其实就是一个单独的 .py 文件.

        使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中, 并执行其中的代码

标准库

        代码示例1:日期计算

        输入任意的两个日期, 计算两个日期之间隔了多少天.

        使用 import 语句导入标准库的 datetime 模块使用 datetime.datetime 构造两个日期. 参数使用 年, 月, 日 这样的格式.

        两个日期对象相减, 即可得到日期的差值

        datetime库的介绍:datetime — 基本日期和时间类型 — Python 3.13.7 文档

import datetime

date1 = datetime.datetime(2006, 8, 3)
date2 = datetime.datetime(2025, 7, 12)
print(date2-date1)

        结果为:

        力扣习题:字符串中的单词翻转

        题目链接:LCR 181. 字符串中的单词反转 - 力扣(LeetCode)

        

        C++版本

class Solution {
public:
    string reverseMessage(string message) 
    {
        string ret;
        int n=message.size();
        for(int i=n-1;i>=0;i--)
        {
            if(message[i]!=' ')
            {
                int right=i;
                while(i>=0&&message[i]!=' ')
                {
                    i--;
                }
                ret+=message.substr(i+1,right-i)+" ";

            }
        }
        return ret.substr(0,ret.size()-1);
    }
};

        力扣习题:旋转字符串

        题目链接:796. 旋转字符串 - 力扣(LeetCode)

C++版本

代码思路

该题解代码采用模拟所有可能旋转位置的方式进行检查。主要步骤包括:

  1. 长度检查:如果 s 和 goal 长度不同,直接返回 false,因为旋转无法改变字符串长度。

  2. 模拟旋转:通过两层循环模拟所有可能的旋转位置:

    • 外层循环遍历每个可能的旋转起始位置 i(从 0 到 n-1),表示旋转后字符串从原字符串的第 i 个字符开始。

    • 内层循环检查从位置 i 开始的旋转字符串是否与 goal 完全匹配。这里使用取模运算 (i + j) % n 来模拟循环访问字符串 s 的字符,确保索引不会越界。

  3. 提前终止:在内层循环中,一旦发现不匹配的字符,立即终止当前旋转位置的检查,继续尝试下一个位置,以优化性能。

  4. 返回结果:如果找到匹配的旋转位置,返回 true;否则,返回 false

    class Solution {
    public:
        bool rotateString(string s, string goal) {
            int m = s.size(), n = goal.size();
            // 步骤1: 检查长度是否相等,不等则直接返回false
            if (m != n) {
                return false;
            }
            // 步骤2: 外层循环,遍历所有可能的旋转起始位置i
            for (int i = 0; i < n; i++) {
                bool flag = true; // 初始化标志位,假设当前旋转位置匹配
                // 内层循环,检查从位置i开始的旋转字符串是否与goal匹配
                for (int j = 0; j < n; j++) {
                    // 使用取模运算模拟循环访问s的字符: 
                    // 从i开始,依次访问s[i], s[i+1], ..., s[n-1], s[0], s[1], ... 
                    if (s[(i + j) % n] != goal[j]) {
                        flag = false; // 发现不匹配字符,设置标志位为false
                        break; // 提前终止内层循环,继续下一个旋转位置
                    }
                }
                // 如果当前旋转位置完全匹配,返回true
                if (flag) {
                    return true;
                }
            }
            // 所有旋转位置都不匹配,返回false
            return false;
        }
    };

    python版本

    给定的Python代码采用了一种高效且巧妙的解法:

  5. 长度检查:首先比较字符串 s 和 goal 的长度。如果长度不相等,那么 s 不可能通过旋转得到 goal,直接返回 False。这是因为旋转操作不会改变字符串的长度。

  6. 子串检查:如果长度相等,则将字符串 s 与自身连接,形成新字符串 s + s,然后检查 goal 是否是 s + s 的子串。这是因为 s + s 包含了 s 的所有可能旋转结果。例如,如果 s = "abcde",则 s + s = "abcdeabcde",其中包含了所有旋转版本:"abcde"、"bcdea"、"cdeab"、"deabc"、"eabcd"。因此,如果 goal 是这些旋转结果之一,它一定会出现在 s + s 中。

class Solution:
    def rotateString(self, s: str, goal: str) -> bool:
        # 首先检查s和goal的长度是否相等,如果不相等,直接返回False
        if len(s) != len(goal):
            return False
        # 然后检查goal是否是s+s的子串。如果是,说明s可以通过旋转得到goal,返回True;否则返回False
        return goal in (s + s)

3、统计是给定字符串前缀的字符串个数

        C++版本

        哈希表:

        存前缀获取单词

  1. 统计words中每个单词出现的次数;
  2. 获取s的每一个前缀,从cnts中获取这个前缀的个数;
class Solution {
public:
    int countPrefixes(vector<string>& words, string s) 
    {
        int n=s.size();
        int ret=0;
        string pre;
        unordered_map<string ,int> hash;
        for(auto&x:words)
        {
            hash[x]++;
        }
        for(int i=0;i<n;i++)
        {
            pre=s.substr(0,i+1);//截取字符串前端
            ret+=hash[pre];
        }
        return ret;

    }
};

        python版本

        遍历words字符串,然后取出所有字符串。判断s是否以它为开头

        可以用startswith方法

class Solution:
    def countPrefixes(self, words: List[str], s: str) -> int:
        count =0
        for word in words:
            if s.startswith(word):#判断是否为s开头
                #s是以word为开头
                count+=1
        return  count

        代码示例2:文本检查工具

        指定一个待搜索路径, 同时指定一个待搜索的关键字.

        在待搜索路径中查找是否文件名中包含这个关键字:

        使用 os.walk ,通过循环即可实现目录的递归遍历.

        os库的文档:os — 其他作系统接口 — Python 3.13.7 文档

        os.walk 返回一个三元组, 分别是 当前路径 , 当前路径下包含的目录名 (多个), 当前路径下包含的文件名 (多个)

#实现一个文件查找功能
#输入要查找的路径,输入要查找的文件名的一部分
#自动再指定路径中查找
import os
inputPath=input("请输入要搜索的路径>")
pattern=input("请输入要搜索的关键词>")
#对目录进行遍历
#递归遍历查找。进入目录内查找
for dirpath,dirnames,filenames in os.walk(inputPath):
# dirpath:遍历对应的路径是什么
# dirnames:当前目录下有哪些目录
# filenames:当前目录下有哪些文件(一个列表包含多个文件)
# os.walk每次调用都能自动的针对子目录进行递归的操作,只需要使用下述循环把所有路径都获取来
    print('__________________')
    print(f'dirpath>{dirpath}')
    print(f'dirnames>')
    for names in dirnames:
        print(names)
    print(f'filenames>')
    for names in filenames:
        print(names)

        测试结果:

第三方库

        第三方库就是别人已经实现好了的库, 我们可以拿过来直接使用.

        虽然标准库已经很强大了, 但是终究是有限的. 而第三方库可以视为是集合了全世界 Python 程序猿的智慧, 可以说是几乎无穷无尽.

        问题来了, 当我们遇到一个需求场景的时候, 如何知道, 该使用哪个第三方库呢?可以针对于具体的项目和需求,利用搜索引擎和AI来搜索

        当我们确定了该使用哪个第三方库之后, 就可以使用 pip 来安装第三方库了.


        pip

        pip 是 Python 内置的 包管理器.

        所谓 包管理器 就类似于我们平时使用的手机 app 应用商店一样.

        第三方库有很多, 是不同的人, 不同的组织实现的.

        Python 官方提供了一个网站PyPI:PyPI ·Python 包索引

        其他大佬写好的第三方库也会申请上传到 PyPI 上.

        这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了.

        pip 在我们安装 Python 的时候就已经内置了. 无需额外安装. pip 是一个可执行程序, 就在 Python 的安装目录中.

        打开 cmd, 直接输入 pip. 如果显示以下帮助信息, 说明 pip 已经准备就绪.

        如果安装的时候勾选:

        那么pip默认可以使用

        如果提示:

'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件。

        则说明没有正确的把 pip 加入到 PATH 中, 可以手动把 pip 所在的路径加入到 PATH 环境变量中。可以参考这位大佬的博客:windows环境下面配置pip环境变量 - 简书

        或者卸载重装 Python, 记得勾上上述选项, 也许是更简单的办法.

        使用以下命令, 即可安装第三方库

pip install [库名]

        注意: 这个命令需要从网络上下载, 使用时要保证网络畅通.安装成功后, 即可使用 import 导入相关模块, 即可进行使用.

        注意: 如果使用 pip 安装完第三方库之后, 在 PyCharm 中仍然提示找不到对应的模块, 则检查 Settings -> Project -> Python Interpreter , 看当前 Python 解释器设置的是否正确. (如果一个机器上安装了多个版本的 Python, 容易出现这种情况).
        

        示例:二维码生成

        二维码本质上就是一段字符串

        可以使用字符串生成二维码片

        生活中用的更多是一个URL(网站)

        推荐使用qrcode第三方库

        在 PyPI 上搜索 qrcode

        二维码 ·PyPI的

        文档开头描述了如何安装 qrcode

        在Windows的cmd和Linux中

pip install qrcode

        页面中央位置描述了 qrcode 库的使用方法

import qrcode
img=qrcode.make("我是春华礼奈")
img.save(r'C:\Users\15699\Pictures\Camera Roll\qrcode.png')

        示例:excel操控脚本

        操控excel的第三方库是十分多的,这里列举一部分

库名称 主要特点 官方网站
xlwings 功能强大,支持与 Excel 交互(可调用 VBA),能进行单元格格式修改,与 Matplotlib 和 Pandas 无缝连接 https://www.xlwings.org/
openpyxl 专用于读写 .xlsx 格式,支持精细的单元格操作、公式、图表等 https://openpyxl.readthedocs.io
pandas 强大的数据分析工具,适合大数据量的读取、处理和分析,API 简洁 https://pandas.pydata.org/ (中文文档:https://www.pypandas.cn)
xlsxwriter 专注于写入 .xlsx 文件,支持丰富的格式和图表 https://xlsxwriter.readthedocs.io/
xlrd 用于从 旧版 Excel (.xls) 读取数据和格式化信息 http://xlrd.readthedocs.io/
xlwt 用于向旧版 Excel (.xls) 写入数据和格式化信息 https://xlwt.readthedocs.io/
xlutils 提供一系列处理 Excel 文件的工具,依赖于 xlrd 和 xlwt http://xlutils.readthedocs.io/
python-docx 虽然主要用于操作 Word,但有时也可间接处理 Excel 数据(需注意其核心功能是 Word) https://python-docx.readthedocs.io/

        读取excel可以使用xlrd模块。文档地址:XLRD — XLRD 2.0.1 文档

        修改excel可以使用xlwt模块。文档地址:xlwt documentation — xlwt 1.3.0 documentation

        安装xlrd:

pip install xlrd==1.2.0

        在终端敲入这个回车后就可以安装

        测试excel的文档:

        

        

import xlrd
#打开文件.xlsx
xlsx=xlrd.open_workbook("成绩单.xlsx")
#获取指定标签页
table=xlsx.sheet_by_index(0)
#获取表格中多少行
nrows=table.nrows
print(f'nrows={nrows}')
#循环获统计操作
total=0#总分
count=0#同学人数
average=0#平均分
for i in range(0,nrows):
    #获取同学ID
    class_ID=(table.cell_value(i, 1))
    if class_ID==1:
        total+=table.cell_value(i,2)
        count+=1
print(f'平均分为:{total/count}')

        结果为:

        

        示例:程序员鼓励机

        监听键盘按键, 每按键 20 下, 就自动播放一个音频, 鼓励一下辛苦搬砖的自己.
        1) 安装第三方依赖

        pynput 用于监听键盘按键. 注意版本不要用最新.

        playsound 用于播放音频.

pip install pynput==1.6.8
pip install playsound==1.2.2

        使用 from import 的格式直接导入模块中的指定对象/函数.

        使用keybroad_listener来监听按键,其中on_release会在释放的时候被调用

        使用listener.start启动监听器。为了防止直接推出,使用listen.join等待用户按键

        使用count来计数,每隔20次调用playsound播放音频

        优化:利用多线程来优化

        关于多线程的知识, 在此处不详细介绍.

        使用 threading.Thread 引入多线程类.使用 Thread 的构造函数来构造一个线程. target 表示线程要执行的任务, args 表示 target 中

        要调用函数的参数.

        使用 Thread.start() 启动线程.

from pynput import keyboard
from playsound import playsound
from threading import Thread
count = 0
def on_release(key):
    print(key)
    global count
    count += 1
    if count % 10 == 0:
        t = Thread(target=playsound, args=('ding.mp3',))
        t.start()
        #playsound('ding.mp3')
listener = keyboard.Listener(
    on_release=on_release)
listener.start()
listener.join()

        

        本期内容到这里就结束了。python的第三方库是十分繁多内容丰富、功能强大的,本篇片是一个入门。如果你喜欢的话请给我点个赞谢谢

封面图自取: