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 表示文件拥有者可以读写,其他用户只能读取。
相关推荐
九圣残炎2 分钟前
【从零开始的LeetCode-算法】3354. 使数组元素等于零
java·算法·leetcode
天天扭码36 分钟前
五天SpringCloud计划——DAY1之mybatis-plus的使用
java·spring cloud·mybatis
程序猿小柒42 分钟前
leetcode hot100【LeetCode 4.寻找两个正序数组的中位数】java实现
java·算法·leetcode
编程修仙1 小时前
Collections工具类
linux·windows·python
芝麻团坚果1 小时前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
zhangjr05751 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
EterNity_TiMe_1 小时前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
Stara05111 小时前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
丁总学Java1 小时前
Maven项目打包,com.sun.tools.javac.processing
java·maven