Python使用os与shutil库操作文件与文件夹全攻略
作者:流㶡
在 Python 自动化脚本、数据处理或项目管理中,操作文件和文件夹是基础且高频的需求,本文将系统讲解如何使用 Python 标准库完成常见文件系统操作,涵盖路径处理、文件/目录增删改查等核心功能,助你高效驾驭文件系统
在 Python 自动化脚本、数据处理或项目管理中,操作文件和文件夹是基础且高频的需求。本文将系统讲解如何使用 Python 标准库(主要是 os、os.path 和 shutil)完成常见文件系统操作,涵盖路径处理、文件/目录增删改查等核心功能,助你高效驾驭文件系统!
一、准备工作:导入必要模块
import os # 操作系统接口 import os.path # 路径操作(通常已包含在 os 中) import shutil # 高级文件操作(复制、移动等)
提示:os.path已包含在os中,import os以后可以直接使用os.path
二、路径操作
1. 拼接路径:os.path.join()
不要手动拼接字符串! 不同操作系统路径分隔符不同(Windows 用 \,Linux/macOS 用 /),应使用 join:
# ✅ 正确方式
path = os.path.join("folder", "subfolder", "file.txt")
print(path) # Windows: folder\subfolder\file.txt | Linux: folder/subfolder/file.txt
# ❌ 错误方式(跨平台不兼容)
path = "folder" + "/" + "subfolder" + "/" + "file.txt"2. 跳转路径(改变当前工作目录):os.chdir()
print("当前目录:", os.getcwd()) # 获取当前工作目录
os.chdir("/home/user/documents") # 切换到指定目录
print("新目录:", os.getcwd())os.getcwd()用于获取当前代码所在文件夹的决定路径
3. 判断相对路径 vs 绝对路径:os.path.isabs(path)
print(os.path.isabs("/home/user/file.txt")) # True(绝对路径)
print(os.path.isabs("data/file.csv")) # False(相对路径)4. 获取文件路径和文件名
| 函数 | 作用 | 示例 |
|---|---|---|
os.path.basename(path) | 获取文件名或最后一级目录名 | basename("/a/b/c.txt") → "c.txt" |
os.path.dirname(path) | 获取目录部分 | dirname("/a/b/c.txt") → "/a/b" |
os.path.split(path) | 同时返回 (目录, 文件名) | split("/a/b/c.txt") → ("/a/b", "c.txt") |
os.path.splitext(path) | 分离文件名和扩展名 | splitext("c.txt") → ("c", ".txt") |
import os
path = "/home/user/report.pdf"
print("文件名:", os.path.basename(path)) # report.pdf
print("目录:", os.path.dirname(path)) # /home/user
print("拆分:", os.path.split(path)) # ('/home/user', 'report.pdf')
print("扩展名:", os.path.splitext(path)) # ('/home/user/report', '.pdf')运行结果:

三、文件与文件夹操作(File & Directory Operations)
1. 创建文件夹:os.mkdir()与os.makedirs()
os.mkdir(path):创建单层目录(父目录必须存在)os.makedirs(path):递归创建多层目录(父目录不存在也会自动创建)
# 创建单层目录
os.mkdir("new_folder")
# 创建多层目录(如 a/b/c)
os.makedirs("parent/child/grandchild", exist_ok=True) # exist_ok=True 避免报错推荐:始终使用 makedirs(..., exist_ok=True),避免因目录已存在而报错。
2. 查询文件大小:os.path.getsize()
size = os.path.getsize("example.txt")
print(f"文件大小: {size} 字节") # 返回字节数扩展:获取目录总大小需遍历所有子文件(见后文“获取文件夹中全部文件名”)。
3. 删除文件和文件夹
| 操作 | 函数 | 说明 |
|---|---|---|
| 删除文件 | os.remove(path) 或 os.unlink(path) | 不能删除目录 |
| 删除空目录 | os.rmdir(path) | 目录非空会报错 |
| 删除非空目录 | shutil.rmtree(path) | 递归删除整个目录树!⚠️ 危险操作 |
# 删除文件
os.remove("temp.txt")
# 删除空文件夹
os.rmdir("empty_folder")
# 强制删除整个文件夹(含内容)
shutil.rmtree("old_project")警告:shutil.rmtree() 无法恢复!建议先检查路径是否正确。
4. 重命名/移动文件或文件夹:os.rename()
# 重命名文件
os.rename("old_name.txt", "new_name.txt")
# 移动文件(跨目录)
os.rename("source/data.csv", "backup/data.csv")
# 重命名文件夹
os.rename("old_dir", "new_dir")本质:rename 既可重命名,也可移动(只要目标路径不同)。
5. 复制文件:shutil.copy()和os.link()
shutil.copy()
| 函数 | 作用 |
|---|---|
shutil.copy(src, dst) | 复制文件内容 + 权限(不保留元数据) |
shutil.copy2(src, dst) | 复制文件 + 完整元数据(如修改时间) |
shutil.copytree(src, dst) | 递归复制整个目录 |
# 复制单个文件
shutil.copy("config.ini", "config_backup.ini")
# 复制目录
shutil.copytree("project_v1", "project_v2")os.link()
使用形式:os.link(src, dst)
- 参数src:表示要修改的文件夹路径或文件路径
- 参数dst:表示修改后的文件夹路径或文件路径
6. 获取文件夹中的全部文件名:os.listdir()与os.walk()
方法 1:os.listdir(path)—— 仅当前目录
files = os.listdir(".") # 获取当前目录下所有文件和文件夹名
print(files) # ['file1.txt', 'folder1', 'script.py']方法 2:os.walk(path)—— 递归遍历所有子目录
for root, dirs, files in os.walk("my_project"):
print(f"目录: {root}")
print(f"子文件夹: {dirs}")
print(f"文件: {files}\n")7. 判断文件 or 文件夹:os.path.isfile()与os.path.isdir()
path = "example.txt"
if os.path.isfile(path):
print("这是一个文件")
elif os.path.isdir(path):
print("这是一个文件夹")
else:
print("路径不存在")安全做法:先用 os.path.exists(path) 检查路径是否存在!
四、实用技巧与注意事项
路径存在性检查
if os.path.exists("data.csv"):
size = os.path.getsize("data.csv")跨平台路径兼容
- 始终用
os.path.join()拼接路径 - 避免硬编码
/或\
异常处理(重要!)
try:
os.remove("temp.log")
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("无权限删除")使用pathlib(现代替代方案)
from pathlib import Path
p = Path("data") / "input.csv"
if p.exists():
print(p.read_text())五、总结
| 功能 | 推荐函数 |
|---|---|
| 路径拼接 | os.path.join() |
| 创建目录 | os.makedirs(exist_ok=True) |
| 删除文件 | os.remove() |
| 删除目录 | shutil.rmtree()(谨慎!) |
| 复制文件 | shutil.copy2() |
| 复制目录 | shutil.copytree() |
| 遍历目录 | os.walk() |
| 判断类型 | os.path.isfile() / os.path.isdir() |
到此这篇关于Python使用os与shutil库操作文件与文件夹全攻略的文章就介绍到这了,更多相关Python os与shutil操作文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
