尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python语言基础:31_ 标准库 新手完全指南

Python语言基础:31_ 标准库 新手完全指南 Python3 的标准库是指安装 Python 后自带的一系列工具包也叫模块或库。你不需要额外安装直接导入就能用。标准库覆盖了文件操作、网络通信、数据处理、日期时间等几乎所有常见需求。一、什么是模块如何导入在 Python 中一个.py文件就是一个模块。标准库就是 Python 官方写好的一大堆.py文件放在你的 Python 安装目录里。1.1 导入模块的三种方式# 方式1导入整个模块 import os print(os.getcwd()) # 获取当前工作目录 # 方式2导入模块中的某个函数 from math import sqrt print(sqrt(16)) # 直接写函数名不用加 math. # 方式3给模块起别名常用 import datetime as dt now dt.datetime.now() print(now)新手注意import语句通常写在文件最开头。二、文件与系统操作2.1 os 模块 —— 操作系统相关os模块让你能用 Python 操作文件系统创建文件夹、删除文件、查看路径等。import os # 获取当前工作目录Current Working Directory print(os.getcwd()) # 列出当前目录下的所有文件和文件夹 print(os.listdir(.)) # 创建一个新文件夹 os.mkdir(test_folder) # 删除一个空文件夹 os.rmdir(test_folder) # 删除一个文件 # os.remove(old_file.txt) # 文件必须存在否则会报错 # 检查文件/文件夹是否存在 print(os.path.exists(test.txt)) print(os.path.isdir(test_folder)) print(os.path.isfile(test.txt)) # 拼接路径自动处理不同系统的斜杠 path os.path.join(folder, subfolder, file.txt) print(path) # Windows: folder\subfolder\file.txt Linux/Mac: folder/subfolder/file.txt # 获取文件大小字节 # print(os.path.getsize(test.txt)) # 重命名文件 # os.rename(old_name.txt, new_name.txt)2.2 sys 模块 —— 系统相关import sys # 查看 Python 版本 print(sys.version) # 查看操作系统平台 print(sys.platform) # win32 / linux / darwin(Mac) # 命令行参数运行脚本时传入的参数 # 比如命令python script.py hello world # sys.argv 会是 [script.py, hello, world] print(sys.argv) # 强制退出程序 # sys.exit(程序结束) # 查看 Python 搜索模块的路径 for p in sys.path: print(p)2.3 pathlib 模块 —— 现代化的路径操作推荐pathlib比os.path更直观、更面向对象。from pathlib import Path # 创建路径对象 p Path(/home/user/documents) # Linux/Mac 示例 # p Path(C:/Users/user/Documents) # Windows 示例 # 获取当前文件所在目录 current Path(__file__).parent # 当前 .py 文件所在的文件夹 print(current) # 拼接路径用 / 操作符很直观 new_path current / data / test.txt print(new_path) # 检查是否存在 print(new_path.exists()) # 创建文件夹包括父目录 # new_path.parent.mkdir(parentsTrue, exist_okTrue) # 读取文件内容一次性读完 # content new_path.read_text(encodingutf-8) # 写入文件 # new_path.write_text(Hello, World!, encodingutf-8) # 遍历文件夹 # for file in current.iterdir(): # print(file.name, file.is_file(), file.is_dir())2.4 shutil 模块 —— 高级文件操作import shutil # 复制文件 # shutil.copy(source.txt, dest.txt) # 复制整个文件夹 # shutil.copytree(source_folder, dest_folder) # 移动文件/文件夹 # shutil.move(old_path, new_path) # 删除整个文件夹包括里面的内容 # shutil.rmtree(folder_to_delete) # 压缩文件夹 # shutil.make_archive(backup, zip, folder_to_zip) # 解压 # shutil.unpack_archive(backup.zip, extract_to)三、文本处理3.1 string 模块 —— 字符串常量import string # 所有小写字母 print(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz # 所有大写字母 print(string.ascii_uppercase) # ABCDEFGHIJKLMNOPQRSTUVWXYZ # 所有字母大小写 print(string.ascii_letters) # abc...xyzABC...XYZ # 所有数字 print(string.digits) # 0123456789 # 所有标点符号 print(string.punctuation) # !#$%()*,-./:;?[\]^_{|}~ # 空白字符 print(string.whitespace) # 空格、制表符、换行等 # 实用示例生成随机密码 import random password .join(random.choices(string.ascii_letters string.digits, k8)) print(password) # 比如aB3xK9pQ3.2 re 模块 —— 正则表达式正则表达式是用来匹配文本模式的强大工具。import re text 我的邮箱是 testexample.com电话是 138-1234-5678 # 1. 搜索找第一个匹配 match re.search(r\d{3}-\d{4}-\d{4}, text) if match: print(找到电话, match.group()) # 138-1234-5678 # 2. 匹配邮箱 email re.search(r[\w\.-][\w\.-]\.\w, text) if email: print(找到邮箱, email.group()) # testexample.com # 3. 查找所有匹配 text2 苹果10元香蕉5元橙子8元 prices re.findall(r\d, text2) # \d 匹配一个或多个数字 print(prices) # [10, 5, 8] # 4. 替换 new_text re.sub(r\d, XX, text2) print(new_text) # 苹果XX元香蕉XX元橙子XX元 # 5. 分割 sentence 苹果;香蕉,橙子|葡萄 fruits re.split(r[;|,], sentence) print(fruits) # [苹果, 香蕉, 橙子, 葡萄] # 6. 验证手机号格式 def is_valid_phone(phone): pattern r^1[3-9]\d{9}$ # 以1开头第二位3-9后面9位数字 return bool(re.match(pattern, phone)) print(is_valid_phone(13800138000)) # True print(is_valid_phone(12345678901)) # False正则常用符号速查\d 数字\w 字母/数字/下划线. 任意字符 1个或多个* 0个或多个? 0个或1个{3} 恰好3个{3,5} 3到5个^ 开头$ 结尾[] 字符集如[abc]匹配 a 或 b 或 c四、日期与时间4.1 datetime 模块 —— 日期时间处理from datetime import datetime, date, time, timedelta # 获取当前时间 now datetime.now() print(now) # 2026-07-27 10:30:15.123456 print(now.year) # 2026 print(now.month) # 7 print(now.day) # 27 print(now.hour) # 10 print(now.minute) # 30 print(now.second) # 15 # 创建指定日期 d date(2026, 7, 27) print(d) # 2026-07-27 t time(14, 30, 0) print(t) # 14:30:00 dt datetime(2026, 7, 27, 14, 30, 0) print(dt) # 2026-07-27 14:30:00 # 日期格式化datetime → 字符串 now datetime.now() print(now.strftime(%Y-%m-%d)) # 2026-07-27 print(now.strftime(%Y年%m月%d日)) # 2026年07月27日 print(now.strftime(%H:%M:%S)) # 10:30:15 print(now.strftime(%Y-%m-%d %H:%M:%S)) # 2026-07-27 10:30:15 # 格式代码 # %Y 四位年份(2026), %y 两位年份(26) # %m 月份(01-12), %d 日期(01-31) # %H 小时(00-23), %M 分钟(00-59), %S 秒(00-59) # %A 星期几(Monday), %a 缩写(Mon) # 字符串解析字符串 → datetime birthday 2000-05-20 d datetime.strptime(birthday, %Y-%m-%d) print(d) # 2000-05-20 00:00:00 # 时间计算timedelta now datetime.now() # 3天后 future now timedelta(days3) print(future) # 2小时30分钟前 past now - timedelta(hours2, minutes30) print(past) # 7天后是几号 week_later date.today() timedelta(days7) print(week_later) # 计算两个日期相差多少天 d1 date(2026, 7, 1) d2 date(2026, 7, 27) delta d2 - d1 print(delta.days) # 264.2 time 模块 —— 时间戳与延时import time # 获取当前时间戳从1970年1月1日到现在经过的秒数 print(time.time()) # 比如1753588215.123 # 程序暂停秒 print(开始) time.sleep(2) # 暂停2秒 print(2秒后继续) # 获取本地时间 local time.localtime() print(local) # time.struct_time(tm_year2026, tm_mon7, tm_mday27, ...) print(f{local.tm_year}年{local.tm_mon}月{local.tm_mday}日) # 格式化时间 print(time.strftime(%Y-%m-%d %H:%M:%S)) # 计时 start time.time() time.sleep(1.5) end time.time() print(f耗时{end - start:.2f} 秒)五、数据结构与算法5.1 collections 模块 —— 扩展数据结构from collections import Counter, defaultdict, deque, namedtuple # Counter计数器 words [apple, banana, apple, orange, banana, apple] count Counter(words) print(count) # Counter({apple: 3, banana: 2, orange: 1}) print(count[apple]) # 3 print(count.most_common(2)) # [(apple, 3), (banana, 2)] 出现最多的2个 text hello world char_count Counter(text) print(char_count) # Counter({l: 3, o: 2, h: 1, e: 1, : 1, w: 1, r: 1, d: 1}) # defaultdict带默认值的字典 from collections import defaultdict # 普通字典访问不存在的键会报错 # d {} # print(d[a]) # KeyError! # defaultdict 访问不存在的键时自动创建默认值 d defaultdict(int) # 默认值为 0 d[a] 1 d[b] 2 print(dict(d)) # {a: 1, b: 2} # 按类别分组 students [(A班, 张三), (B班, 李四), (A班, 王五)] grouped defaultdict(list) for cls, name in students: grouped[cls].append(name) print(dict(grouped)) # {A班: [张三, 王五], B班: [李四]} # deque双端队列两头都能快速增删 from collections import deque dq deque([1, 2, 3]) dq.append(4) # 右边添加 dq.appendleft(0) # 左边添加 print(dq) # deque([0, 1, 2, 3, 4]) dq.pop() # 右边弹出 dq.popleft() # 左边弹出 print(dq) # deque([1, 2, 3]) # 实用实现固定长度的历史记录 history deque(maxlen3) history.append(页面1) history.append(页面2) history.append(页面3) print(history) # deque([页面1, 页面2, 页面3], maxlen3) history.append(页面4) print(history) # deque([页面2, 页面3, 页面4], maxlen3) 自动丢弃最老的 # namedtuple带名字的元组 from collections import namedtuple Point namedtuple(Point, [x, y]) p Point(10, 20) print(p.x, p.y) # 10 20 print(p) # Point(x10, y20) # 比普通元组更易读 # 普通元组p[0], p[1] 不知道代表什么 # namedtuplep.x, p.y 一目了然 Person namedtuple(Person, name age city) tom Person(Tom, 25, Beijing) print(f{tom.name} 住在 {tom.city}今年 {tom.age} 岁)5.2 itertools 模块 —— 迭代器工具import itertools # 无限迭代器小心死循环 # count(10) → 10, 11, 12, 13, ... # cycle(ABC) → A, B, C, A, B, C, ... # repeat(5, 3) → 5, 5, 5 # 组合迭代器 # 排列有序元素不同位置算不同结果 items [A, B, C] for p in itertools.permutations(items, 2): print(p) # (A, B) (A, C) (B, A) (B, C) (C, A) (C, B) # 组合无序元素不同位置算相同结果 for c in itertools.combinations(items, 2): print(c) # (A, B) (A, C) (B, C) # 笛卡尔积 colors [红, 绿] sizes [大, 小] for item in itertools.product(colors, sizes): print(item) # (红, 大) (红, 小) (绿, 大) (绿, 小) # 分组 data [(A, 1), (A, 2), (B, 3), (B, 4), (A, 5)] for key, group in itertools.groupby(data, keylambda x: x[0]): print(key, list(group)) # A [(A, 1), (A, 2)] # B [(B, 3), (B, 4)] # A [(A, 5)] ← 注意A又出现了一次因为groupby只合并相邻的相同元素 # 链式连接多个可迭代对象 list1 [1, 2, 3] list2 [a, b, c] for item in itertools.chain(list1, list2): print(item, end ) # 1 2 3 a b c六、数学运算6.1 math 模块 —— 数学函数import math # 常量 print(math.pi) # 3.141592653589793 print(math.e) # 2.718281828459045 # 绝对值、取整 print(math.fabs(-5.5)) # 5.5 print(math.ceil(4.2)) # 5 向上取整 print(math.floor(4.9)) # 4 向下取整 print(math.trunc(4.9)) # 4 截断小数 print(round(4.5)) # 4 四舍五入Python内置函数 print(round(4.5001)) # 5 # 幂与对数 print(math.pow(2, 10)) # 1024.0 2的10次方 print(math.sqrt(16)) # 4.0 平方根 print(math.log(100, 10)) # 2.0 以10为底的对数 print(math.log(math.e)) # 1.0 自然对数 # 三角函数参数是弧度 print(math.sin(math.pi / 2)) # 1.0 sin(90°) print(math.cos(0)) # 1.0 cos(0°) print(math.degrees(math.pi)) # 180.0 弧度转角度 print(math.radians(180)) # 3.14159... 角度转弧度 # 最大公约数、阶乘 print(math.gcd(12, 18)) # 6 print(math.factorial(5)) # 120 5! 5×4×3×2×16.2 random 模块 —— 随机数import random # 随机整数 [1, 10] 包含两端 print(random.randint(1, 10)) # 随机整数 [1, 10) 不包含10 print(random.randrange(1, 10)) # 随机小数 [0, 1) print(random.random()) # 随机小数 [a, b) print(random.uniform(1.5, 5.5)) # 从序列中随机选一个 fruits [苹果, 香蕉, 橙子, 葡萄] print(random.choice(fruits)) # 从序列中随机选多个可重复 print(random.choices(fruits, k3)) # 从序列中随机选多个不重复 print(random.sample(fruits, k2)) # 打乱顺序直接修改原列表 numbers [1, 2, 3, 4, 5] random.shuffle(numbers) print(numbers) # 设置随机种子让结果可复现 random.seed(42) print(random.randint(1, 100)) # 每次运行结果都一样6.3 statistics 模块 —— 统计计算import statistics data [1, 2, 3, 4, 5, 5, 6, 7, 8, 9] print(statistics.mean(data)) # 平均值 5.0 print(statistics.median(data)) # 中位数 5.0 print(statistics.mode(data)) # 众数 5出现次数最多的 print(statistics.stdev(data)) # 标准差 print(statistics.variance(data)) # 方差七、文件读写7.1 json 模块 —— JSON 数据处理JSON 是一种轻量级的数据交换格式Python 的字典和 JSON 很像。import json # Python 对象 → JSON 字符串 data { name: 张三, age: 25, is_student: False, scores: [85, 92, 78], address: { city: 北京, zip: 100000 } } # 转成 JSON 字符串 json_str json.dumps(data, ensure_asciiFalse, indent2) print(json_str) # { # name: 张三, # age: 25, # is_student: false, # ... # } # ensure_asciiFalse 让中文正常显示 # indent2 让输出有缩进更易读 # JSON 字符串 → Python 对象 text {name: 李四, age: 30} obj json.loads(text) print(obj[name]) # 李四 # 写入 JSON 文件 with open(data.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) # 从 JSON 文件读取 with open(data.json, r, encodingutf-8) as f: loaded json.load(f) print(loaded[name])7.2 csv 模块 —— CSV 表格数据处理CSV 是逗号分隔的值文件Excel 可以直接打开。import csv # 写入 CSV with open(students.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) # 写入表头 writer.writerow([姓名, 年龄, 成绩]) # 写入数据行 writer.writerow([张三, 20, 85]) writer.writerow([李四, 22, 92]) writer.writerow([王五, 21, 78]) # newline 是必需的否则 Windows 下会多写空行 # 读取 CSV with open(students.csv, r, encodingutf-8) as f: reader csv.reader(f) for row in reader: print(row) # [姓名, 年龄, 成绩] # [张三, 20, 85] # [李四, 22, 92] # [王五, 21, 78] # 用字典方式读写更直观 with open(students.csv, r, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: print(f{row[姓名]} 的成绩是 {row[成绩]}) # 写入字典 with open(output.csv, w, newline, encodingutf-8) as f: fieldnames [name, age, score] writer csv.DictWriter(f, fieldnamesfieldnames) writer.writeheader() writer.writerow({name: Alice, age: 25, score: 90})7.3 pickle 模块 —— Python 对象序列化pickle可以把任何 Python 对象列表、字典、甚至自定义类的实例保存到文件之后再读出来。import pickle data { name: 张三, age: 25, scores: [90, 85, 88], info: {city: 北京, tel: 13800138000} } # 保存到文件 with open(data.pkl, wb) as f: # 注意是 wb 二进制写入 pickle.dump(data, f) # 从文件读取 with open(data.pkl, rb) as f: # 注意是 rb 二进制读取 loaded pickle.load(f) print(loaded) print(loaded[name]) # 也可以不用文件直接转字节串 byte_data pickle.dumps(data) restored pickle.loads(byte_data)⚠️安全警告不要加载来源不明的 pickle 文件它可能包含恶意代码八、网络相关8.1 urllib 模块 —— 简单的 HTTP 请求from urllib import request, parse # 发送 GET 请求 url https://api.github.com response request.urlopen(url) print(response.status) # 200 表示成功 print(response.read().decode(utf-8)) # 读取响应内容 # 发送带参数的 GET 请求 params parse.urlencode({name: 张三, age: 25}) url fhttps://httpbin.org/get?{params} response request.urlopen(url) print(response.read().decode(utf-8)) # 发送 POST 请求 data parse.urlencode({username: admin, password: 123456}).encode(utf-8) req request.Request(https://httpbin.org/post, datadata, methodPOST) req.add_header(User-Agent, Mozilla/5.0) response request.urlopen(req) print(response.read().decode(utf-8)) # 下载文件 # request.urlretrieve(https://example.com/image.jpg, downloaded.jpg) 对于更复杂的网络请求推荐使用第三方库requests但它不是标准库需要pip install requests。九、调试与日志9.1 logging 模块 —— 日志记录import logging # 基本配置 logging.basicConfig( levellogging.DEBUG, # 记录 DEBUG 及以上级别的日志 format%(asctime)s - %(levelname)s - %(message)s, datefmt%Y-%m-%d %H:%M:%S ) # 五个日志级别从低到高 logging.debug(这是调试信息) # 开发时使用 logging.info(这是一般信息) # 正常运行时的信息 logging.warning(这是警告) # 可能有问题 logging.error(这是错误) # 出错了 logging.critical(这是严重错误) # 系统要崩溃了 # 写入文件 logging.basicConfig( filenameapp.log, filemodea, # a追加w覆盖 levellogging.INFO, format%(asctime)s [%(levelname)s] %(message)s ) logging.info(程序启动) logging.error(发生了一个错误)9.2 traceback 模块 —— 错误追踪import traceback try: result 1 / 0 except Exception as e: print(出错了, e) traceback.print_exc() # 打印完整的错误堆栈信息十、其他实用模块10.1 functools 模块 —— 函数工具from functools import lru_cache, partial, reduce # lru_cache缓存函数结果装饰器 lru_cache(maxsize128) def fibonacci(n): if n 2: return n return fibonacci(n - 1) fibonacci(n - 2) print(fibonacci(100)) # 瞬间算出因为缓存了中间结果 # partial固定函数的部分参数 from operator import add add_10 partial(add, 10) # 固定第一个参数为10 print(add_10(5)) # 15 # reduce累积计算 from functools import reduce numbers [1, 2, 3, 4, 5] total reduce(lambda x, y: x y, numbers) print(total) # 15 (12345) product reduce(lambda x, y: x * y, numbers) print(product) # 120 (1×2×3×4×5)10.2 hashlib 模块 —— 哈希/加密import hashlib text Hello, World! # MD5 md5 hashlib.md5(text.encode(utf-8)).hexdigest() print(md5) # 65a8e27d8879283831b664bd8b7f0ad4 # SHA-256更安全 sha256 hashlib.sha256(text.encode(utf-8)).hexdigest() print(sha256) # 文件校验 # with open(file.zip, rb) as f: # file_hash hashlib.sha256(f.read()).hexdigest() # print(file_hash)10.3 copy 模块 —— 深拷贝与浅拷贝import copy original [1, [2, 3], 4] # 浅拷贝只拷贝最外层内层对象共享 shallow copy.copy(original) shallow[1][0] X print(original) # [1, [X, 3], 4] ← 原列表也被改了 # 深拷贝完全独立复制所有层级 original2 [1, [2, 3], 4] deep copy.deepcopy(original2) deep[1][0] Y print(original2) # [1, [2, 3], 4] ← 原列表不受影响 print(deep) # [1, [Y, 3], 4]10.4 inspect 模块 —— 检查对象import inspect def my_function(a, b, c10): 这是一个示例函数 pass # 查看函数参数 print(inspect.signature(my_function)) # (a, b, c10) # 查看函数文档 print(my_function.__doc__) # 查看对象的类型 print(inspect.isfunction(my_function)) # True print(inspect.isbuiltin(print)) # True # 获取类的所有方法 class MyClass: def method1(self): pass def method2(self): pass print([name for name, _ in inspect.getmembers(MyClass, predicateinspect.isfunction)])十一、标准库速查表模块用途常用功能os操作系统getcwd,listdir,mkdir,path.existssys系统信息argv,exit,version,platformpathlib路径操作Path,mkdir,read_text,write_textshutil高级文件操作copy,move,rmtree,make_archivere正则表达式search,match,findall,sub,splitdatetime日期时间now,strftime,strptime,timedeltatime时间戳/延时time,sleep,strftimejsonJSON 处理dumps,loads,dump,loadcsvCSV 处理reader,writer,DictReader,DictWriterpickle对象序列化dump,load,dumps,loadsmath数学函数pi,sqrt,sin,cos,log,ceilrandom随机数randint,choice,shuffle,samplestatistics统计mean,median,mode,stdevcollections扩展数据结构Counter,defaultdict,deque,namedtupleitertools迭代器工具permutations,combinations,product,chainurllibHTTP 请求urlopen,urlretrieve,Requestlogging日志debug,info,warning,error,basicConfighashlib哈希md5,sha256copy拷贝copy,deepcopyfunctools函数工具lru_cache,partial,reduce十二、如何查看标准库完整列表Python 官方标准库文档非常全面# 查看 Python 安装路径下的标准库 import sys import os # 标准库通常在这个目录 stdlib_path os.path.join(os.path.dirname(sys.executable), Lib) print(stdlib_path) # 查看某个模块的帮助文档 import json help(json) # 查看完整文档 help(json.dumps) # 查看某个函数的文档或者在命令行# 查看模块文档 python -m pydoc os # 启动本地文档服务器 python -m pydoc -p 8080然后在浏览器打开http://localhost:8080查看所有标准库文档。Python 标准库非常庞大上面介绍的是最常用、最实用的部分。作为新手建议先重点掌握os/pathlib— 文件路径操作datetime— 日期时间json— 数据序列化random— 随机数re— 正则表达式collections— 扩展数据结构logging— 日志记录
返回列表