当前位置: 首页 > article >正文

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

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

1 文件路径的基本操作

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

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

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

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 更加直观且易用。

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() 方法。

# 创建文件
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 提供了不同的方法:

# 删除文件
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()

import shutil

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

3 文件遍历

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

3.1 使用 os.listdir()

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

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

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

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

说明:

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

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

# 使用 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 获取文件大小和修改时间
# 使用 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 来检查文件或目录的类型,以及是否具有某些权限。

# 检查是否是文件
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(),可以修改文件的读、写、执行权限。

import os

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

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

说明:

  • 文件权限使用八进制表示法,如 0o644 表示文件拥有者可以读写,其他用户只能读取。

http://www.kler.cn/news/363507.html

相关文章:

  • 2024年软件设计师中级(软考中级)详细笔记【11】知识产权基础知识(分值2~3分)
  • C++20中头文件span的使用
  • 我谈Sobel算子与高斯一阶微分的关系
  • MongoDB的常用语句
  • Java工具类--OkHttp工具类
  • MIT-OC Electrochemical Energy Systems4-7
  • springboot RedisTemplate支持多个序列化方式
  • MacOS RocketMQ安装
  • 「AIGC」AI设计工具Polymet
  • mac m1 git clone 忽略大小写敏感
  • Linux 部署 Harbor 镜像仓库详解
  • 数据库、数据仓库、数据湖和数据中台有什么区别
  • 如何利用ChatGPT提升SEO内容排名
  • 思迈特助力鸡蛋帮获“24年数据要素x”河北分赛“发展潜力奖”
  • oracle数据恢复—文件损坏导致Oracle数据库打开报错的数据恢复案例
  • Spark 基础概念
  • 编程练习7 5G网络建设
  • AI手机的启明星:从分级标准到智能体手机
  • 【秋招笔试-支持在线评测】10.23花子秋招(已改编)-三语言题解
  • YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理
  • C++程序流程结构——选择结构
  • 前端_007_Axios库
  • Flutter SizedBox组件
  • 奇安信勒索解密工具分析及调用
  • Java程序设计:spring boot(9)——应用热部署
  • Java|乐观锁和悲观锁在自旋的时候分别有什么表现?