文章目录
使用库
库 就是是别人已经写好了的代码, 可以让我们直接拿来用。
Python通过模块来体现"库"
- 降低程序猿的学习成本
- 提高程序的开发效率
按照库的来源,可以大致分成两大类:
- 标准库: Python 自带的库. 只要安装了 Python 就可以直接使用
- 第三方库: 其他人实现的库. 要想使用, 需要额外安装
第三方库是非常非常庞大的,数量和种类远大于标准库
一、标准库
1、认识标准库
在 Python 官方文档上可以看到这些库的内容.
https://docs.python.org/3.10/library/index.html
简单来说, 主要是这些部分:
- 内置函数 (如 print, input 等)
- 内置类型 (针对 int, str, bool, list, dict 等类型内置的操作).
- 文本处理
- 时间日期
- 数学计算
- 文件目录
- 数据存储 (操作数据库, 数据序列化等).
- 加密解密
- 操作系统相关
- 并发编程相关 (多进程, 多线程, 协程, 异步等).
- 网络编程相关
- 多媒体相关 (音频处理, 视频处理等)
- 图形化界面相关
2、使用import导入模块
import [模块名]
- 所谓 “模块” , 其实就是一个单独的
.py
文件. - 使用 import 语句可以把这个外部的
.py
文件导入到当前.py
文件中, 并执行其中的代码
3、案例
①日期计算
输入任意的两个日期, 计算两个日期之间隔了多少天
- 使用 import 语句导入标准库的 datetime 模块
- 使用 datetime.datetime 构造两个日期. 参数使用 年, 月, 日 这样的格式.
- 两个日期对象相减, 即可得到日期的差值
# 日期计算
import datetime
date1 = datetime.datetime(2023, 6, 8)
date2 = datetime.datetime(2020, 7, 8)
print(date1-date2) # 1065 days, 0:00:00
可以直接从模块中导入类型:
from datetime import datetime
date1 = datetime(2023, 6, 8)
date2 = datetime(2020, 7, 8)
print(date1-date2) # 1065 days, 0:00:00
这样不再需要模块名再加个.
操作了
也可以将模块名重命名一下:
import datetime as dt
date1 = dt.datetime(2023, 6, 8)
date2 = dt.datetime(2020, 7, 8)
print(date1-date2) # 1065 days, 0:00:00
②单词逆序
https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/
题目描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"l am a student.“,则输出"student.a am l”。
- 先删除首尾空格
- 使用 str 的 split 方法进行字符串切分, 指定 空格 为分隔符. 返回结果是一个列表.
- 使用列表的 reverse 方法进行逆序.
- 使用 str 的 join 方法进行字符串拼接. 把列表中的内容进行合并.
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip() # 删除首尾空格
tokens=s.split()
tokens.reverse()
return ' '.join(tokens)
③旋转字符串
https://leetcode.cn/problems/rotate-string/
题目描述:
给定两个字符串,s和goal。如果在若干次旋转操作之后,s能变成goal ,那么返回true。
s的旋转操作就是将s最左边的字符移动到最右边。
例如,若s = 'abcde’,在旋转一次之后结果就是’bcdea’。
- 使用len求字符串的长度.如果长度不相同,则一定不能旋转得到.
- 将s和自己进行拼接,然后直接使用in方法来判定goal是否是s+s的子串.
class Solution:
def rotateString(self, s: str, goal: str) -> bool:
return len(s)==len(goal) and goal in (s+s)
④统计是给定字符串前缀的字符串数目
https://leetcode.cn/problems/count-prefixes-of-a-given-string/
题目描述:
给你一个字符串数组words和一个字符串s,其中words[i]和s只包含小写英文字母。
请你返回words中是字符串s前缀的字符串数目。
一个字符串的前缀是出现在字符串开头的子字符串。
子字符串是一个字符串中的连续一段字符序列。
- 依次遍历 words 中的字符串
- 直接使用字符串的 startswith 方法即可判定当前字符串是否是 s 的前缀.
class Solution:
def countPrefixes(self, words: List[str], s: str) -> int:
count=0
for word in words:
if s.startswith(word):
# s是以word开头
count+=1
return count
字符串操纵的文档:https://docs.python.org/3/library/stdtypes.html#str
⑤模拟实现everything
要求:
指定一个待搜索路径, 同时指定一个待搜索的关键字.
在待搜索路径中查找是否文件名中包含这个关键字.
- 使用
os.walk
,只需要使用简单的循环,就可以完成递归遍历的过程,就不必手写递归代码了 os.walk
返回一个三元组,分别是当前路径(这是一个绝对路径),当前路径下包含的目录名 (多个),当前路径下包含的文件名(多个)
# 模拟实现everything
# 模拟实现everything
import os
while True:
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的文档:https://docs.python.org/3/library/os.html
二、第三方库
1、认识第三方库
第三方库就是别人已经实现好了的库,我们可以拿过来直接使用。
虽然标准库已经很强大了,但是终究是有限的。而第三方库可以视为是集合了全世界 Python 程序猿的智慧,可以说是几乎无穷无尽。
问题来了, 当我们遇到一个需求场景的时候, 如何知道, 该使用哪个第三方库呢?
——搜索引擎
当我们确定了该使用哪个第三方库之后, 就可以使用 pip 来安装第三方库了。
2、pip的使用
pip 是 Python 内置的包管理器。
所谓 包管理器 就类似于我们平时使用的手机 app 应用商店一样. 第三方库有很多, 是不同的人, 不同的组织实现的. 为了方便大家整理,Python 官方提供了一个网站 PyPI https://pypi.org/, 来收集第三方库.
其他大佬写好的第三方库也会申请上传到PyPI 上. 这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了。
使用以下命令, 即可安装第三方库
pip install [库名]
注意:这个命令需要从网络上下载, 使用时要保证网络畅通。安装成功后, 即可使用 import 导入相关模块, 即可进行使用。
3、案例
①二维码生成器
二维码本质上,就是一段字符串
我们可以把任意的字符串,制作成一个二维码图片
生活中使用的二维码,更多的是一个URL(网址)
(1)需要qrcode
(2)查看qrcode
文档
(3)使用pip安装
pip install qrcode[pil]
(4)写代码
import qrcode
img = qrcode.make('hello')
img.save('qrcode.png')
结果:
PS:可以在简历上把自己的博客和gitee链接变成这样的二维码,粘贴上去,更加分。
②操作excel
读取 excel 可以使用 xlrd 模块. 文档地址: https://xlrd.readthedocs.io/en/latest/
修改 excel 可以使用 xlwt 模块. 文档地址: https://xlwt.readthedocs.io/en/latest/
此处以 xlrd 为例, 演示 excel 的基本操作。
需求 有如下 excel 表格:E:/test.xlsx
求1班的平均分
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
位置的元素值。
import xlrd
# 1、打开xlsx文件
xlsx = xlrd.open_workbook("E:/test/test.xlsx")
# 2、获取到指定的标签页
table = xlsx.sheet_by_index(0)
# 3、获取表格中有多少行
nrows = table.nrows
# 4、循环统计
count = 0
sum = 0
for i in range(1, nrows):
# 获取到当前同学的班级id
classID = table.cell_value(i, 1)
if classID == 1:
count += 1
sum += table.cell_value(i, 2)
print(f'avg={sum/count}')