Python 文件路径与文件系统操作

处理文件的另一个重要方面是文件路径和文件系统操作。Python 提供了多个模块用于操作文件系统,其中最常用的是 os 模块和 pathlib 模块。掌握这些工具,能够让你在自动化任务中更轻松地管理文件和目录。

1 文件路径的基本操作

在操作文件时,路径是一个至关重要的概念。文件路径可以是绝对路径或相对路径:

  • 绝对路径:从根目录开始的完整路径。
  • 相对路径:相对于当前工作目录的路径。
1.1 os.path 模块

os.path 模块包含了一系列用于操作路径的方法。下面是一些常用的方法:

python 复制代码
import os

# 获取当前文件的绝对路径
current_file_path = os.path.abspath('example.txt')
print("绝对路径:", current_file_path)

# 获取文件所在的目录
directory = os.path.dirname(current_file_path)
print("文件目录:", directory)

# 获取文件的基本名(不含目录部分)
basename = os.path.basename(current_file_path)
print("文件名:", basename)

# 分离文件名和扩展名
file_name, file_extension = os.path.splitext(current_file_path)
print("文件名:", file_name)
print("扩展名:", file_extension)

解释:

  • os.path.abspath():将相对路径转换为绝对路径。
  • os.path.dirname():返回路径中的目录部分。
  • os.path.basename():返回路径中的文件名部分。
  • os.path.splitext():将文件名和扩展名分开。
1.2 pathlib 模块

pathlib 模块提供了更现代、更面向对象的方式来操作路径。相比 os.pathpathlib 更加直观且易用。

python 复制代码
from pathlib import Path

# 创建一个 Path 对象
file_path = Path('example.txt')

# 获取绝对路径
absolute_path = file_path.resolve()
print("绝对路径:", absolute_path)

# 获取文件所在的目录
directory = file_path.parent
print("文件目录:", directory)

# 获取文件的基本名和扩展名
print("文件名:", file_path.stem)
print("扩展名:", file_path.suffix)

说明:

  • Path 对象可以更自然地表示文件路径,提供的方法如 .stem.suffix.parent 能简化文件路径的操作。

2 操作文件和目录

Python 提供了丰富的文件和目录操作方法,涵盖创建、删除、重命名和遍历文件等功能。

2.1 创建文件和目录

要创建文件,可以直接使用文件操作模式,如 'w'。如果要创建目录,可以使用 os.makedirs()pathlib.Path.mkdir() 方法。

python 复制代码
# 创建文件
with open('new_file.txt', 'w') as file:
    file.write("这是新创建的文件。")

# 创建目录(os模块)
os.makedirs('new_folder/sub_folder', exist_ok=True)
print("目录已创建")

# 创建目录(pathlib模块)
Path('new_folder/sub_folder').mkdir(parents=True, exist_ok=True)
print("目录已使用 pathlib 创建")

解释:

  • os.makedirs():递归创建目录。如果 exist_ok=True,当目录已存在时不会引发错误。
  • Path.mkdir():创建目录,与 os.makedirs() 类似。
2.2 删除文件和目录

要删除文件和目录,ospathlib 提供了不同的方法:

python 复制代码
# 删除文件
os.remove('new_file.txt')
print("文件已删除")

# 删除空目录
os.rmdir('new_folder/sub_folder')
print("空目录已删除")

# 使用 pathlib 删除文件和目录
Path('new_folder/sub_folder').rmdir()
print("pathlib 删除目录")

注意:

  • os.remove()Path.unlink() 可以删除文件。
  • os.rmdir()Path.rmdir() 只能删除空目录。

如果要删除非空目录,可以使用 shutil.rmtree()

python 复制代码
import shutil

# 删除非空目录
shutil.rmtree('new_folder')
print("非空目录已删除")

3 文件遍历

在许多情况下,你可能需要遍历某个目录下的所有文件或子目录,Python 提供了多种方式来遍历目录。

3.1 使用 os.listdir()

os.listdir() 函数可以列出指定目录下的所有文件和子目录:

python 复制代码
# 列出目录中的文件和子目录
items = os.listdir('.')
print("当前目录中的项目:", items)
3.2 使用 os.walk()

os.walk() 函数用于递归遍历目录树。它会生成一个三元组 (dirpath, dirnames, filenames),分别表示当前目录路径、该目录下的子目录和文件名。

python 复制代码
# 递归遍历目录树
for dirpath, dirnames, filenames in os.walk('.'):
    print("目录路径:", dirpath)
    print("子目录:", dirnames)
    print("文件:", filenames)

说明:

  • os.walk() 非常适合用于遍历复杂的目录结构,尤其是当需要递归处理所有文件时。
3.3 使用 pathlib 遍历

pathlib 提供了 .iterdir().glob().rglob() 方法来遍历目录,支持模式匹配。

python 复制代码
# 使用 iterdir() 列出目录中的文件和子目录
path = Path('.')
for item in path.iterdir():
    print(item)

# 使用 glob() 列出所有 .txt 文件
for txt_file in path.glob('*.txt'):
    print(txt_file)

# 使用 rglob() 递归查找所有 .py 文件
for py_file in path.rglob('*.py'):
    print(py_file)

说明:

  • .glob() 支持使用通配符匹配文件,如 *.txt 匹配所有 .txt 文件。
  • .rglob() 递归遍历目录树,查找所有匹配的文件。

4 获取文件和目录信息

有时你需要获取文件的详细信息,比如文件大小、修改时间等。os 模块和 pathlib 模块都提供了相应的方法。

1 获取文件大小和修改时间
python 复制代码
# 使用 os 获取文件大小和修改时间
file_size = os.path.getsize('example.txt')
file_mtime = os.path.getmtime('example.txt')

print(f"文件大小: {file_size} 字节")
print(f"文件最后修改时间: {file_mtime}")

# 使用 pathlib 获取文件大小和修改时间
file_path = Path('example.txt')
print(f"文件大小: {file_path.stat().st_size} 字节")
print(f"文件最后修改时间: {file_path.stat().st_mtime}")
2 检查文件类型和权限

可以通过 os.pathpathlib 来检查文件或目录的类型,以及是否具有某些权限。

python 复制代码
# 检查是否是文件
is_file = os.path.isfile('example.txt')
print("是文件:", is_file)

# 检查是否是目录
is_dir = os.path.isdir('example_folder')
print("是目录:", is_dir)

# 使用 pathlib 检查类型
path = Path('example.txt')
print("是文件:", path.is_file())
print("是目录:", path.is_dir())

说明:

  • os.path.isfile()Path.is_file() 用于检查路径是否是文件。
  • os.path.isdir()Path.is_dir() 用于检查路径是否是目录。

5 文件权限管理

Python 可以操作文件和目录的权限,常用的函数有 os.chmod()pathlib.Path.chmod(),可以修改文件的读、写、执行权限。

python 复制代码
import os

# 设置文件为只读
os.chmod('example.txt', 0o444)

# 使用 pathlib 设置文件为可读写
Path('example.txt').chmod(0o644)

说明:

  • 文件权限使用八进制表示法,如 0o644 表示文件拥有者可以读写,其他用户只能读取。
相关推荐
爱吃的强哥7 分钟前
vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包
前端·javascript·vue.js
echo17542512 分钟前
Apipost免费版、企业版和私有化部署详解
java
谈不譚网安16 分钟前
CSRF请求伪造
前端·网络安全·csrf
TT模板22 分钟前
苹果cmsV10主题 MXonePro二开优化修复开源版
前端·html5
拖孩23 分钟前
【Nova UI】十一、组件库中 Icon 组件的测试、使用与全局注册全攻略
前端·javascript·vue.js·ui·sass
去伪存真28 分钟前
不用动脑,手把手跟着我做,就能掌握Gitlab+Jenkins提交代码自动构部署
前端·jenkins
逢生博客30 分钟前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
异常君30 分钟前
Java 高并发编程:等值判断的隐患与如何精确控制线程状态
java·后端·代码规范
异常君30 分钟前
Java 日期处理:SimpleDateFormat 线程安全问题及解决方案
java·后端·代码规范
都叫我大帅哥32 分钟前
Spring AI中的ChatClient:从入门到精通,一篇搞定!
java·spring·ai编程