python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python os与shutil操作文件

Python使用os与shutil库操作文件与文件夹全攻略

作者:流㶡

在 Python 自动化脚本、数据处理或项目管理中,操作文件和文件夹是基础且高频的需求,本文将系统讲解如何使用 Python 标准库完成常见文件系统操作,涵盖路径处理、文件/目录增删改查等核心功能,助你高效驾驭文件系统

在 Python 自动化脚本、数据处理或项目管理中,操作文件和文件夹是基础且高频的需求。本文将系统讲解如何使用 Python 标准库(主要是 osos.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("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)

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")

跨平台路径兼容

异常处理(重要!)

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操作文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文