【Python】使用库 -- 详解

就是别人已经写好了的代码,可以让我们直接拿来用。

一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在实际开发中,也并非所有的代码都自己手写,而是要充分利用现成的库,简化开发过程。

按照库的来源,可以大致分成两大类:

  1. 标准库:Python 自带的库。只要安装了 Python 就可以直接使用。
  2. 第三方库:其他人实现的库。要想使用,需要额外安装。

我们自己也可以实现 “第三方库” 发布出去,交给别人来使用。


一、标准库

1、认识标准库

Python 自身内置了非常丰富的库。

Python 官方文档上可以看到这些库的内容:

The Python Standard Library — Python 3.10.13 documentation

主要是下面这些部分:
  • 内置函数( print,input )
  • 内置类型(针对 int,str,bool,list,dict 等类型内置的操作)
  • 文本处理
  • 时间日期
  • 数学计算
  • 文件目录
  • 数据存储(操作数据库,数据序列化等)
  • 加密解密
  • 操作系统相关
  • 并发编程相关(多进程,多线程,协程,异步等)
  • 网络编程相关
  • 多媒体相关(音频处理,视频处理等)
  • 图形化界面相关
  • .... ...

不需要把这些库的内容都背下来,只要大概知道里面有什么,需要用的时候能够找到即可。


2、使用 import 导入模块

使用 import 可以导入标准库的一个模块

import [模块名]

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

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


3、日期计算(代码示例)

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

  • 使用 import 语句导入标准库的 datetime 模块
  • 使用 datetime.datetime 构造两个日期,参数使用 “年,月,日” 这样的格式。
  • 两个日期对象相减,即可得到日期的差值。

关于 datetime 的更多操作,可以参考官方文档:

datetime — Basic date and time types — Python 3.12.4 documentation


4、字符串操作(代码示例)

字符串是 Python 的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用。

(1)剑指offer 58 —— 翻转单词顺序

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

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student. ",则输出 "student. a am I"。

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

(2)leetcode 796 —— 旋转字符串

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

给定两个字符串,s 和 goal。如果在若干次旋转操作之后,s 能变成 goal,那么返回 true。

s 的旋转操作就是将 s 最左边的字符移动到最右边。例如,若 s = 'abcde',再旋转一次之后结果就是 'bcdea' 。

  • 使用 len 字符串的长度如果长度不相同,则一定不能旋转得到。
  • s 自己进行拼接,然后直接使用 in 方法来判定 goal 是否是 s + s 的子串。

def rotateString(s, goal):return len(s) == len(goal) and goal in s + sprint(rotateString('abcde', 'cdeab'))

(3)leetcode 2255 —— 统计是给定字符串前缀的字符串数目

 对应题目链接:2255. 统计是给定字符串前缀的字符串数目 - 力扣(LeetCode)

给你一个字符串数组 words 和一个字符串 s,其中 words[i] 和 s 只包含小写英文字母。请你返回 words 中是字符串 s 前缀 的 字符串数目 。

一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。

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

关于字符串的更多操作,参考官方文档

Built-in Types — Python 3.12.4 documentation


(4)文件查找工具(代码示例)

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

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

  • 使用 os.walk 即可实现目录的递归遍历。

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

os.walk 每次调用都能自动的去针对子目录进行递归的操作,只需要使用上述循环就可以把所有的路径都获取出来。

关于 os 模块的更多操作,参考官方文档:

os — Miscellaneous operating system interfaces — Python 3.12.4 documentation


二、第三方库

1、认识第三方库

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

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

当我们遇到一个需求场景的时候,如何知道、该使用哪个第三方库呢?

就需要用到下面几个网站了:

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


2、使用 pip

pip 是 Python 内置的包管理器,所谓包管理器就类似于我们平时使用的手机 app 应用商店一样。

第三方库有很多,是不同的人、不同的组织实现的。为了方便大家整理,Python 官方提供了一个网站 PyPI https://pypi.org/ 来收集第三方库。其他大佬写好的第三方库也会申请上传到 PyPI 上,这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了。

pip 在我们安装 Python 的时候就已经内置了,无需额外安装。

pip 是一个可执行程序,就在 Python 的安装目录中。打开 cmd,直接输入:pip如果显示以下帮助信息,说明 pip 已经准备就绪。

如果最开始按照要求在安装 Python 的时候勾选了:

那么 pip 就是默认可用的。

如果提示:

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

则说明没有正确的把 pip 加入到 PATH 中,可以手动把 pip 所在的路径加入到 PATH 环境变量中。可参考:windows环境下面配置pip环境变量 - 简书 (jianshu.com)

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

使用命令:pip install [库名] 即可安装第三方库。

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

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


3、生成二维码(代码示例)

所谓二维码本质上就是使用黑白点阵表示一个字符串。我们日常使用的二维码内部一般是一个 URL,扫码后会自动跳转到对应的地址,从而打开一个网页。可以把任意的字符串制作成一个二维码图片。

(1)通过搜索引擎,确定使用哪个库

得到情报,qrcode 这个库可以用来生成二维码。


(2)查看 qrcode 文档

PyPI 上搜索 qrcode:

点击则进入 qrcode 的详情页。

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

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


(3)使用 pip 安装

在终端输入命令:pip install qrcode[pil]

注意 pip 安装的时候可能会有警告,提示使用的 pip 版本太低。这个警告可以不用处理,不影响正常使用。

 (4)编写代码

按照文档给出的示例,模仿一段代码:

运行完毕后得到结果如下:

使用微信或者其他工具扫码,即可看到二维码内容。


4、操作 Excel(代码示例)

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

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

此处以 xlrd 为例,演示 Excel 的基本操作。

需求有如下 Excel 表格 d:/test.xlsx

求 100 班的同学的平均分。

虽然 Excel 自身支持很强大的功能,也可以求和、求平均值。但是如果是稍微复杂的需求,操作起来可能就没那么方便了。


(1)安装 xlrd

pip install xlrd==1.2.0

注意 此处要指定版本号安装. 如果不指定版本号, 则安装最新版. 最新版里删除了对 xlsx 格式文件的支持。

(2)编写代码

  • 使用 open_workbook 方法打开一个 Excel 文件。
  • 使用 xlsx.sheet_by_index(0) 获取到 0 号标签页。
  • 使用 table.nrows 获取到表格的行数。
  • 使用 table.cell_value(row, col) 获取到表格中 row,col 位置的元素值。


5、“程序员鼓励师”(代码示例)

监听键盘按键,每按键 20 就自动播放一个音频,鼓励一下辛苦搬砖的每一个程序员。

(1)安装第三方依赖

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

playsound 用于播放音频

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


(2)准备音频文件

此处准备了一个 ding.mp3 放到和 py 代码同级目录中:


(3)编写代码

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

使用 keyboard.Listener 监听键盘按键,其中 on_release 会在释放按键时被调用。

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

使用 count 计数,每隔 10 次,调用 playsound 播放音频文件。

运行程序 , 即可感受到效果。

4)改进代码

上述代码在执行过程中,会感觉到播放音频会导致按键卡顿,可以使用多线程解决这个问题。

  • 使用 threading.Thread 引入多线程类。
  • 使用 Thread 的构造函数来构造一个线程。target 表示线程要执行的任务,args 表示 target 中要调用函数的参数。
  • 使用 Thread.start() 启动线程。


6、学生管理系统(综合案例)

(1)需求说明

实现一个命令行版本的学生管理系统。

功能:
  • 新增学生
  • 显示学生
  • 查找学生
  • 删除学生
  • 存档到文件

(2)创建入口函数

  • 使用一个全局列表 students 表示所有学生信息。
  • 使用 menu 函数和用户交互,这是一个自定义函数。
  • 使用 insert,show,find,delete 这几个自定义函数完成增删查操作。
  • 使用 sys.exit 实现程序退出。


(3)实现菜单函数


(4)实现增删查操作

A. 新增学生


B. 显示学生


C. 查找学生


D. 删除学生


(5)加入存档读档

A. 约定存档格式

将存档文件放到 d:/record.txt 文件中,并且以行文本的方式来保存学生信息,格式如下:

学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
  • 每个同学占一行。
  • 每个同学的信息之间使用 \t 制表符进行分隔。

B. 实现存档函数

insert delete 末尾,调用 save 函数进行存档。


C. 实现读档函数

main 函数开头的地方,调用 load 加载存档:


(6)演示测试过程


(7)打包成 exe 程序发布

当前虽然已经实现了一个管理系统,但是 .py 的文件只能在安装了 Python 环境的机器上运行。为了能够更好的部署到其他主机上,可以借助 pyinstaller 来把 Python 程序打包成 exe 程序。

A. 安装 pyinstaller
pip install pyinstaller


B. 打包程序
  • -F 表示打包成单个 exe(不带动态库)
pyinstaller -F 学生管理系统.py

打包完成之后:

此时就可以把这个程序拷贝给其他机器使用了,无需 Python 环境也可运行。


三、扩展

1、python cookbook

python 经典进阶书籍, 针对各种典型场景提供了一些解决方案。

2、awesome-python

Python 的一些非常实用的程序库:awesome-python: awesome-python 的中文版 (gitee.com)


3、500 Lines or Less

使用简短的 Python 代码来实现一些有意思的程序:

aosabook/500lines: 500 Lines or Less (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP与UDP的理解

文章目录 UDP协议UDP协议的特点UDP的应用以及杂项 TCP协议TCP协议段格式解释和TCP过程详解确认应答机制 -- 序号和确认序号以及6位标志位中的ACK超时重传机制连接管理机制 与标志位SYN,FIN,ACK滑动窗口与16位窗口大小流量控制拥塞控制延迟应答捎带应答和面向字节流粘包问题TCP异…

Docker核心技术:容器技术要解决哪些问题

云原生学习路线导航页(持续更新中) 本文是 Docker核心技术 系列文章:容器技术要解决哪些问题,其他文章快捷链接如下: 应用架构演进容器技术要解决哪些问题(本文)Docker的基本使用Docker是如何实…

深入理解Java 8的流式API:简化代码,提升效率

文章目录 深入理解Java 8的流式API:简化代码,提升效率一、流 Stream二、Int | Long | Double Stream三、收集器 Collectors 深入理解Java 8的流式API:简化代码,提升效率 Java 8引入了Stream API,它提供了一种新的抽象&…

JavaDS —— 二叉树

树的基本概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树形结构中,子树之间不能有…

SpringCloud------Sentinel(微服务保护)

目录 雪崩问题 处理方式!!!技术选型 Sentinel 启动命令使用步骤引入依赖配置控制台地址 访问微服务触发监控 限流规则------故障预防流控模式流控效果 FeignClient整合Sentinel线程隔离-------故障处理线程池隔离和信号量隔离​编辑 两种方式优缺点设置方式 熔断降级-----…

tinymce富文本支持word内容同时粘贴文字图片上传 vue2

效果图 先放文件 文件自取tinymce: tinymce富文本简单配置及word内容粘贴图片上传 封装tinymce 文件自取&#xff1a;tinymce: tinymce富文本简单配置及word内容粘贴图片上传 页面引用组件 <TinymceSimplify refTinymceSimplify v-model"knowledgeBlockItem.content…

用html做python教程01

用html做python教程01 前言开肝构思实操额外修饰更换字体自适应 最后 前言 今天打开csdn的时候&#xff0c;看见csdn给我推荐了一个python技能书。 说实话&#xff0c;做得真不错。再看看我自己&#xff0c;有亿点差距&#x1f61f;。 开肝 先创建一个文件&#xff0c;后缀…

【Vue3】工程创建及目录说明

【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

【linux】Shell脚本中basename和dirname的详细用法教程

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Python爬虫-淘宝搜索热词数据

前言 本文是该专栏的第70篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细针对“亚马逊Amazon搜索热词”数据采集的详细介绍,对此感兴趣的同学,可以往前翻阅《Python爬虫-某跨境电商(AM)搜索热词》进行查看。 而在本文,笔者将以淘宝为例,获取…

Linux----Mplayer音视频库的移植

想要播放视频音乐就得移植相关库到板子上 Mplayer移植需要依赖以下源文件&#xff1a;(从官网获取或者网上) 1、zlib-1.2.3.tar.gz &#xff1a;通用的内存空间的压缩库。 2、libpng-1.2.57.tar.gz :png格式图片的压缩或解压库 3、Jpegsrc.v9b.tar.gz : jpeg格式图片的压…

n7.Nginx 第三方模块

Nginx 第三方模块 第三模块是对nginx 的功能扩展&#xff0c;第三方模块需要在编译安装Nginx 的时候使用参数–add-modulePATH指定路径添加&#xff0c;有的模块是由公司的开发人员针对业务需求定制开发的&#xff0c;有的模块是开 源爱好者开发好之后上传到github进行开源的模…

注册安全分析报告:东方航空

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

移动硬盘在苹果电脑上使用后在windows中无法读取 Win和Mac的硬盘怎么通用

在日益普及的跨平台工作环境中&#xff0c;苹果电脑与Windows PC之间的数据交换成为日常需求。然而&#xff0c;用户常面临一个困扰&#xff1a;为何苹果电脑的硬盘能在macOS下流畅运行&#xff0c;却在Windows系统中变得“水土不服”&#xff1f;这一问题核心在于硬盘格式的不…

IP转接服务的重要性及其应用

在现今互联网高度发达的时代&#xff0c;IP转接服务的重要性日益凸显。对于家庭和企业而言&#xff0c;它不仅是连接互联网的桥梁&#xff0c;更是确保网络稳定、高效运行的关键。本文将深入探讨IP转接服务的核心意义及其在互联网世界中的应用。 IP转接服务&#xff0c;简而言之…

QT小细节

QT小细节 1 QTextToSpeech1.1 cmake1.2 qmake 2 QChartView QT6 6.7.2 1 QTextToSpeech 从下图可以看到&#xff0c;分别使用qmake或者cmake编译情况下的&#xff0c;QTextToSpeech的使用方法 QTextToSpeech官方链接&#xff0c;也可以直接在QT Creator的帮助中搜索 1.1 cma…

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说&#xff1a;“屏幕不够&#xff0c;滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不&#xff0c;从 SwiftUI 5.0&#xff08;iOS 17&#xff09;开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…

Linux TFTP服务搭建及使用

1、TFTP 服务器介绍 TFTP &#xff08; Trivial File Transfer Protocol &#xff09;即简单文件传输协议是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为 69 2、TFTP 文件传输的特点 tftp…

Redis--12--1--分布式锁---java

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis与分布式锁Jedis实现1.RedisConfig2.RedisDistLock3.应用4.加上看门狗逻辑 RedisDistLockWithDog redisson实现1.依赖2.代码 Redis与分布式锁 Jedis实现 1.Re…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(六)-无人机直接C2通信

目录 引言 5.4 直接C2通信 5.4.1 概述 5.4.2 A2X直接C2通信服务的授权策略 5.4.3 USS使用A2X直接C2通信服务的C2授权程序 5.4.4 直接C2通信建立程序 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别…