Python使用库
库 就是是别人已经写好了的代码, 可以让我们直接拿来用.
荀子曰: “君子性非异也,善假于物也”
一个编程语言能不能流行起来, 一方面取决于语法是否简单方便容易学习, 一方面取决于生态是否完备.
所谓的 “生态” 指的就是语言是否有足够丰富的库, 来应对各种各样的场景.
实际开发中, 也并非所有的代码都自己手写, 而是要充分利用现成的库, 简化开发过程.
按照库的来源, 可以大致分成两大类
-
标准库: Python 自带的库. 只要安装了 Python 就可以直接使用.
-
第三方库: 其他人实现的库. 要想使用, 需要额外安装.
咱们自己也可以实现 “第三方库” 发布出去, 交给别人来使用
标准库
认识标准库
Python 自身内置了非常丰富的库.
在 Python 官方文档上可以看到这些库的内容。
https://docs.python.org/3.10/library/index.html
简单来说, 主要是这些部分:
- 内置函数 (如 print, input 等)
- 内置类型 (针对 int, str, bool, list, dict 等类型内置的操作).
- 文本处理
- 时间日期
- 数学计算
- 文件目录
- 数据存储 (操作数据库, 数据序列化等).
- 加密解密
- 操作系统相关
- 并发编程相关 (多进程, 多线程, 协程, 异步等).
- 网络编程相关
- 多媒体相关 (音频处理, 视频处理等)
- 图形化界面相关
- …
我们不需要把这些库的内容都背下来, 只要大概知道里面有啥, 需要用的时候能够找到即可.
使用 import 导入模块
使用 import 可以导入标准库的一个 模块
import [模块名]
所谓 “模块” , 其实就是一个单独的 .py 文件.
使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中, 并执行其中的代码
日期计算器
输入任意的两个日期, 计算两个日期之间隔了多少天.
- 使用 import 语句导入标准库的 datetime 模块
- 使用 datetime.datetime 构造两个日期. 参数使用 年, 月, 日 这样的格式.
- 两个日期对象相减, 即可得到日期的差值.
#代码1
import datetime
#先构造 datetime 变量
date1 = datetime.datetime(year=2021,month=1,day=9)
date2 = datetime.datetime(year=2022,month=10,day=9)
print(date2 - date1)
#代码2
from datetime import datetime
#先构造 datetime 变量
date1 = datetime(year=2021,month=1,day=9)
date2 = datetime(year=2022,month=10,day=9)
print(date2 - date1)
#代码3
import datetime as dt
#先构造 datetime 变量
date1 = dt.datetime(year=2021,month=1,day=9)
date2 = dt.datetime(year=2022,month=10,day=9)
print(date2 - date1)
关于 datetime 的更多操作,可以参考官方文档
https://docs.python.org/3/library/datetime.html
翻转字符串顺序
字符串是 Python 的内置类型, 字符串的很多方法不需要导入额外的模块, 即可直接使用.
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
- 使用 str 的 split 方法进行字符串切分, 指定 空格 为分隔符. 返回结果是一个列表.
- 使用列表的 reverse 方法进行逆序.
- 使用 str 的 join 方法进行字符串拼接. 把列表中的内容进行合并.
def reverseWords(s: str):
tokens = s.split(' ')
tokens.reverse()
return ' '.join(tokens)
print(reverseWords("I am a student."))
旋转字符串
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。
s 的 旋转操作 就是将 s 最左边的字符移动到最右边。
例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。
- 使用 len 求字符串的长度. 如果长度不相同, 则一定不能旋转得到.
- 将 s 和 自己 进行拼接, 然后直接使用 in 方法来判定goal是否是s+s的子串
def rotateSting(s, goal):
if len(s) != len(goal):
return False
return goal in (s + s)
print(rotateSting("abcde", "cdeab"))
print(rotateSting("abcde", "edcba"))
统计字符串前缀的字符串数目
给你一个字符串数组 words 和一个字符串 s ,其中 words[i] 和 s 只包含 小写英文字母 。
请你返回 words 中是字符串 s 前缀 的 字符串数目 。
一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。
- 依次遍历 words 中的字符串
- 直接使用字符串的 startswith 方法即可判定当前字符串是否是 s 的前缀
def countPrefixes(words: list, s: str):
count = 0
for word in words:
if s.startswith(word):
# s 是以 word 开头
count += 1
return count
print(countPrefixes(['a', 'b', 'c', 'ab', 'bc', 'abc'], 'abc'))
print(countPrefixes(['a', 'a'], 'aa'))
关于字符串的更多操作, 参考官方文档
https://docs.python.org/3/library/stdtypes.html#str
文件查找工具
# 实现文件查找工具
# 输入要查找的路径, 输入要搜索的文件名(一部分)
# 自动的在指定的路径中进行查找~
import os
inputPath = input('请输入要搜索的路径:')
pattern = input('请输入要搜索的关键词:')
for dirpath, _, 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