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 表示文件拥有者可以读写,其他用户只能读取。
相关推荐
除了菜一无所有!11 分钟前
基于SpringBoot技术的教务管理
java·spring boot·后端
lexusv8ls600h1 小时前
微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)
java·微服务·设计模式
逸狼1 小时前
【JavaEE初阶】网络原理(2)
java·网络·java-ee
甲柒1 小时前
12-Docker发布微服务
java·docker·微服务
一只特立独行的猪6111 小时前
Java面试题——微服务篇
java·开发语言·微服务
浅念同学1 小时前
JavaEE-多线程上
java·java-ee
Narutolxy1 小时前
探索开源语音识别的未来:高效利用先进的自动语音识别技术20241030
python·macos·xcode
liuyang-neu3 小时前
力扣 简单 70.爬楼梯
java·算法·leetcode
Mopes__3 小时前
Python | Leetcode Python题解之第517题超级洗衣机
python·leetcode·题解
码农幻想梦3 小时前
实验九 视图的使用
前端·数据库·oracle