在 Python 中,文件与目录的路径操作、创建与删除、改名移动及元信息查询,常用标准库 os 与 shutil 完成。上一节侧重文件内容的读写,本节侧重文件系统层面的管理。路径拼接宜使用 os.path.join,避免硬编码分隔符,以便在不同操作系统间移植。本节归纳常用 API 及使用时的注意点。
当前目录与目录列表
import os
print(os.getcwd())
print(os.listdir("."))getcwd 返回当前工作目录。listdir 列出该目录下的名称(不含子目录内深层文件的递归列表)。
创建目录
mkdir 仅创建单层目录。makedirs 可一次创建多级路径(如 a/b/c)。目标已存在时 mkdir 将引发 FileExistsError,可先判断:
import os
os.mkdir("data")
# os.makedirs("a/b/c")
print(os.path.exists("data"))
if not os.path.exists("data"):
os.mkdir("data")删除文件
import os
if os.path.exists("demo.txt"):
os.remove("demo.txt")
print("已删除")
else:
print("文件不存在")删除目录
空目录使用 os.rmdir。目录非空时须使用 shutil.rmtree 递归删除。下列示例使用 ignore_errors=True,路径不存在时不抛错:
import os
import shutil
# os.rmdir("data")
shutil.rmtree("data", ignore_errors=True)改名与移动
os.rename 既可改名,也可将文件移动到已存在的目标目录(目标目录须事先存在):
import os
os.rename("old.txt", "new.txt")
# os.rename("a.txt", "backup/a.txt")路径工具
判断存在、区分文件与目录、拼接路径、取文件名与后缀等功能在 os.path 中。拼接应使用 join,勿手写 \ 或 /:
import os
print(os.path.exists("a.txt"))
print(os.path.isfile("a.txt"))
print(os.path.isdir("data"))
print(os.path.join("data", "x.txt"))
print(os.path.basename("a/b.txt"))
print(os.path.dirname("a/b.txt"))
print(os.path.splitext("a/b.txt"))列出并过滤
可用列表推导按后缀筛选文件。os.walk 递归进入子目录,适合扫描整棵目录树:
import os
txt_files = [f for f in os.listdir(".") if f.endswith(".txt")]
print(txt_files)
for root, dirs, files in os.walk("."):
for name in files:
print(os.path.join(root, name))文件信息
import os
info = os.stat("a.txt")
print(info.st_size)
print(info.st_mtime)st_size 为字节数。st_mtime 为最后修改时间的时间戳,需可读日期时可交给 datetime 转换。
注意事项
- 删除不存在的路径将引发
FileNotFoundError,可先exists或捕获异常。 - 非空目录不能使用
rmdir,应改用shutil.rmtree。 - 路径拼接使用
os.path.join,避免写死分隔符。
本节说明了 Python 中 os、shutil 对路径与目录的常见操作。下一节介绍异常处理:try / except / else / finally 与 raise。