Python 标准库里有几个模块几乎每个项目都用得到:os 管系统与环境变量、sys 管 Python 解释器本身、pathlib 管路径。前面 文件读写操作 已经介绍过 pathlib 的基础。这一篇把三个模块日常最常用的功能串起来讲,让你以后写脚本时知道该找哪个。
一、os 模块:跟系统打交道
环境变量
1 | import os |
注意:os.environ 的值永远是字符串。要 bool/int 自己转:
1 | DEBUG = os.getenv("DEBUG", "0").lower() in ("1", "true", "yes") |
目录操作
1 | os.getcwd() # 当前工作目录 |
但现代 Python 推荐用 pathlib——见下一节。
os.path(老 API,逐步用 pathlib 取代)
1 | os.path.join("a", "b", "c.txt") # 'a/b/c.txt' |
同样功能 pathlib 全都有,代码更漂亮。
系统信息
1 | os.cpu_count() # CPU 核心数 |
执行外部命令
1 | os.system("ls -la") # ❌ 老 API,不推荐(返回值只有退出码) |
二、sys 模块:跟 Python 解释器打交道
命令行参数
1 | import sys |
简单场景用 sys.argv,复杂用 argparse:
1 | import argparse |
标准输入输出错误
1 | sys.stdin # 标准输入 |
退出
1 | sys.exit() # 正常退出 |
注意:sys.exit() 内部抛 SystemExit 异常。所以 try / except: 会把它捕获——但 except Exception: 不会(因为 SystemExit 继承自 BaseException)。
Python 版本 / 平台
1 | sys.version # '3.13.0 (main, ...)' |
模块搜索路径
1 | sys.path # 模块搜索路径列表 |
递归深度
1 | sys.getrecursionlimit() # 默认 1000 |
内存与对象
1 | sys.getsizeof(obj) # 对象占用字节数(浅) |
三、pathlib:面向对象的路径操作
前面 文件读写操作 简单讲过,这里补充完整常用 API。
1 | from pathlib import Path |
属性
1 | p.name # 'input.txt' |
判断
1 | p.exists() |
读写(一步)
1 | Path("greeting.txt").write_text("你好", encoding="utf-8") |
目录
1 | Path("dir").mkdir(parents=True, exist_ok=True) # 递归+幂等 |
变换
1 | p.with_name("new.txt") |
复制/移动
pathlib 没有直接的 copy/move,用 shutil:
1 | import shutil |
Path 有 .rename(target) 但不能跨设备:
1 | Path("a.txt").rename("b.txt") |
四、__file__ 和脚本自身路径
在一个模块里知道自己的位置:
1 | from pathlib import Path |
别用相对路径,否则脚本在别的目录启动就崩。永远基于 __file__ 拼绝对路径。
五、os + pathlib 混用
有些 os 的功能 pathlib 没有:
1 | # 环境变量 |
六、临时文件与目录
1 | import tempfile |
七、常用工具集
配置项统一读取
1 | def env(key, default=None, cast=str): |
项目根目录
1 | PROJECT_ROOT = Path(__file__).resolve().parent.parent |
找所有 .py
1 | for p in Path("src").rglob("*.py"): |
统计目录大小
1 | def total_size(root: Path) -> int: |
八、一个完整例子:项目文件整理脚本
1 | # organize.py |
九、常见陷阱
os.environ值只是字符串:需要转 int/bool。os.chdir副作用:全局改工作目录,多线程/协程时容易乱。- 相对路径依赖启动目录:永远基于
__file__拼绝对路径。 Path拼接用/:不是+。shutil.rmtree是核弹:写错路径可能删掉整个磁盘。加确认或用send2trash库送回收站。sys.exit抛异常:会被try/except:捕获,用except Exception:不会。- Windows 路径与正斜杠:pathlib 会自动处理,但注意
str(p)在 Windows 上会用反斜杠。
十、小结与延伸阅读
- os:环境变量、进程、目录(旧 API);
- sys:命令行参数、退出码、Python 版本、模块路径;
- pathlib:面向对象的路径,优先用它取代
os.path; - 复制/删目录用
shutil; - 临时文件用
tempfile; - 项目路径统一从
__file__出发; - 环境变量值都是字符串,手动转。
延伸阅读:
- os:https://docs.python.org/zh-cn/3/library/os.html
- sys:https://docs.python.org/zh-cn/3/library/sys.html
- pathlib:https://docs.python.org/zh-cn/3/library/pathlib.html
下一篇 常用标准库:collections 我们讲更高级的数据结构。