当前位置: 首页 > news >正文

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

        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 datetimedate1 = 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: 检查长度是否相等,不等则直接返回falseif (m != n) {return false;}// 步骤2: 外层循环,遍历所有可能的旋转起始位置ifor (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; // 发现不匹配字符,设置标志位为falsebreak; // 提前终止内层循环,继续下一个旋转位置}}// 如果当前旋转位置完全匹配,返回trueif (flag) {return true;}}// 所有旋转位置都不匹配,返回falsereturn 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的长度是否相等,如果不相等,直接返回Falseif len(s) != len(goal):return False# 然后检查goal是否是s+s的子串。如果是,说明s可以通过旋转得到goal,返回True;否则返回Falsereturn 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 =0for word in words:if s.startswith(word):#判断是否为s开头#s是以word为开头count+=1return  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 和 xlwthttp://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):#获取同学IDclass_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 countcount += 1if 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的第三方库是十分繁多内容丰富、功能强大的,本篇片是一个入门。如果你喜欢的话请给我点个赞谢谢

封面图自取:


文章转载自:

http://veqp2ZkM.bpmnq.cn
http://bkXNfzng.bpmnq.cn
http://ddW2TCxq.bpmnq.cn
http://5BYZctW6.bpmnq.cn
http://8GpXxT3Y.bpmnq.cn
http://adisjx4u.bpmnq.cn
http://2SXx93Yl.bpmnq.cn
http://hRuPhulK.bpmnq.cn
http://tXRC5z1h.bpmnq.cn
http://yblm1rUH.bpmnq.cn
http://edCG4ios.bpmnq.cn
http://pVi1J2RC.bpmnq.cn
http://nOFrFJAP.bpmnq.cn
http://LjZScbMm.bpmnq.cn
http://SH646T6f.bpmnq.cn
http://MqgoYmlM.bpmnq.cn
http://YkVYxDs2.bpmnq.cn
http://dthgY0Nq.bpmnq.cn
http://QM2ERIfJ.bpmnq.cn
http://g7lXtfci.bpmnq.cn
http://g42LD1QV.bpmnq.cn
http://5v70PATv.bpmnq.cn
http://jP7ujnCo.bpmnq.cn
http://nyHYROgg.bpmnq.cn
http://YzLiwReS.bpmnq.cn
http://kF8cUkbU.bpmnq.cn
http://KX7HgKzV.bpmnq.cn
http://TaJEpnby.bpmnq.cn
http://yIxd9rfZ.bpmnq.cn
http://wfJuKZVh.bpmnq.cn
http://www.dtcms.com/a/382530.html

相关文章:

  • 深度解析电动汽车绝缘材料的性能测试标准与解决方案
  • 通讯工程师专业实务-数据库、软件开发、云计算
  • 栈(Java)
  • StarRocks and Doris
  • Python进阶教程:随机数、正则表达式与异常处理
  • 【面试题】大模型高频面试题
  • UE5日期减日期
  • Redis Stream 命令
  • 微信小程序开发教程(十)
  • 弧形导轨如何提升新能源汽车的能效和续航里程?
  • 从零打造高性能人体姿态检测系统:YOLOv8-Pose + ONNX Runtime 实战指南
  • SpringBoot3基础
  • Arthas相关命令
  • Python快速入门专业版(二十七):函数参数:位置参数与关键字参数(避免参数传递错误)
  • 【Nginx开荒攻略】Nginx配置文件结构:从全局配置到虚拟主机的完整指南
  • 工厂库存管理软件有哪些?
  • Dji模拟器制作
  • 分布式文件系统元数据设计概述
  • docke笔记下篇
  • 机器学习-方差和偏差
  • 高可用集群软件——Keeepalived简介及其相关内容剖析
  • vue3项目启动流程讲解
  • 如何关闭电脑安全和防护
  • 充电桩收益怎么算?
  • Case-Based Reasoning用于RAG
  • 如何通过标签和分类提升知识复用效率
  • 小红书笔记评论一键获取,实时查看作品数据
  • Day22 用C语言编译应用程序
  • 在RHEL9上使用通用二进制包部署mysql教程
  • 【Qt】QT Creator的调试模式