在 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。