标准库
认识标准库
Python 自身内置了非常丰富的库
在python官方文档上可以看到这些库的内容
简单来说, 主要是这些部分
内置函数 (如 print, input 等)
内置类型 (针对 int, str, bool, list, dict 等类型内置的操作).
文本处理
时间日期
数学计算
文件目录
数据存储 (操作数据库, 数据序列化等).
加密解密
操作系统相关
并发编程相关 (多进程, 多线程, 协程, 异步等).
网络编程相关
多媒体相关 (音频处理, 视频处理等)
图形化界面相关
…
我们不需要把这些库的内容都背下来, 只要大概知道里面有啥, 需要用的时候能够找到即可
使用 import 导入模块
使用 import 可以导入标准库的一个模块
import [模块名]
所谓 “模块” , 其实就是一个单独的 .py 文件.
使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中, 并执行其中的代码
代码示例: 日期计算
输入任意的两个日期, 计算两个日期之间隔了多少天.
使用 import 语句导入标准库的 datetime 模块
使用 datetime.datetime 构造两个日期. 参数使用 年, 月, 日 这样的格式.
两个日期对象相减, 即可得到日期的差值
import datetime date1 = datetime.datetime(2012, 2, 14) date2 = datetime.datetime(2022, 7, 12) print(date2 - date1)
关于 datetime 的更多操作, 可以参考python官方文档
代码示例: 字符串操作
字符串是 Python 的内置类型, 字符串的很多方法不需要导入额外的模块, 即可直接使用
剑指offer 58, 翻转单词顺序
题目
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变
为简单起见,标点符号和普通字母一样处理
例如输入字符串"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.'))
leetcode 796, 旋转字符串
题目
给定两个字符串, 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 + s print(rotateString('abcde', 'cdeab'))
leetcode 2255, 统计是给定字符串前缀的字符串数目
题目
给你一个字符串数组 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 += 1 return res print(countPrefixes(["a","b","c","ab","bc","abc"], "abc"))
更多字符串操作,请看官方文档
代码示例: 文件查找工具
指定一个待搜索路径, 同时指定一个待搜索的关键字.
在待搜索路径中查找是否文件名中包含这个关键字.
使用 os.walk 即可实现目录的递归遍历.
os.walk 返回一个三元组, 分别是 当前路径 , 当前路径下包含的目录名 (多个), 当前路径下包含的文件名 (多个)
import os 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 模块的更多操作, 参考官方文档