Python3(24) os 模块文件与目录操作

        在 Python 编程领域,对文件和目录进行操作是开发过程中的常见需求。os模块作为 Python 与操作系统交互的重要接口,提供了丰富且强大的功能,用于处理文件与目录相关任务。本博客通过代码示例系统梳理os模块的文件与目录操作方法,方便日后复习回顾。


一、基础操作:文件与目录的访问权限及路径获取

1.1 检查文件或目录的访问权限

        使用os.access()函数可以检查文件或目录是否具有特定的访问权限,例如可读、可写、可执行。该函数接受两个参数:文件或目录路径、权限标志。

import os

file_path = "test.txt"
# 检查文件是否可读
if os.access(file_path, os.R_OK):
    print(f"{file_path} 可读")
# 检查文件是否可写
if os.access(file_path, os.W_OK):
    print(f"{file_path} 可写")
# 检查文件是否可执行
if os.access(file_path, os.X_OK):
    print(f"{file_path} 可执行")

权限标志常用的有:

  • os.R_OK:检查可读性
  • os.W_OK:检查可写性
  • os.X_OK:检查可执行性
  • os.F_OK:检查文件是否存在

1.2 获取当前工作目录

  os.getcwd()函数用于获取当前工作目录的路径。

import os

current_dir = os.getcwd()
print(f"当前工作目录:{current_dir}")

二、文件操作:创建、读写、重命名与删除

2.1 重命名文件

os.rename()函数用于重命名文件或目录,接受原名称和新名称作为参数。

import os

old_name = "old_file.txt"
new_name = "new_file.txt"
try:
    os.rename(old_name, new_name)
    print(f"{old_name} 已重命名为 {new_name}")
except FileNotFoundError:
    print(f"{old_name} 不存在")
except FileExistsError:
    print(f"{new_name} 已存在")

2.2 删除文件

  os.remove()函数用于删除指定的文件。

import os

file_to_delete = "test_file.txt"
try:
    os.remove(file_to_delete)
    print(f"{file_to_delete} 已删除")
except FileNotFoundError:
    print(f"{file_to_delete} 不存在")

2.3 获取文件详细信息

  os.stat()函数用于获取文件或目录的详细信息,如文件大小、修改时间等。

import os

file_path = "example.txt"
file_stat = os.stat(file_path)
print(f"文件大小:{file_stat.st_size} 字节")
print(f"最后修改时间:{file_stat.st_mtime}")

返回的file_stat对象包含多个属性:

  • st_size:文件大小(字节)
  • st_mtime:最后修改时间(时间戳)
  • st_ctime:创建时间(时间戳)

三、目录操作:创建、删除、遍历与路径管理

3.1 创建目录

  • 创建单个目录:使用os.mkdir()函数创建一个新目录。
import os

new_dir = "new_folder"
try:
    os.mkdir(new_dir)
    print(f"{new_dir} 目录已创建")
except FileExistsError:
    print(f"{new_dir} 目录已存在")
  • 递归创建目录:使用os.makedirs()函数可以创建多级目录。
import os

nested_dir = "parent/child/grandchild"
try:
    os.makedirs(nested_dir)
    print(f"{nested_dir} 目录已创建")
except FileExistsError:
    print(f"{nested_dir} 目录已存在")

3.2 删除目录

  • 删除空目录os.rmdir()函数用于删除指定的空目录。
import os

empty_dir = "empty_folder"
try:
    os.rmdir(empty_dir)
    print(f"{empty_dir} 目录已删除")
except FileNotFoundError:
    print(f"{empty_dir} 目录不存在")
except OSError:
    print(f"{empty_dir} 目录非空,无法删除")
  • 递归删除目录os.removedirs()函数可递归删除目录及其子目录(需确保目录为空)。
import os

nested_dir = "parent/child/grandchild"
try:
    os.removedirs(nested_dir)
    print(f"{nested_dir} 目录已递归删除")
except OSError:
    print(f"{nested_dir} 删除失败,可能存在非空目录")

3.3 列出目录内容

  os.listdir()函数返回指定目录下的所有文件和子目录的名称列表。

import os

target_dir = "."
contents = os.listdir(target_dir)
for item in contents:
    print(item)

3.4 路径拼接与检查

  • 路径拼接os.path.join()函数用于拼接路径,会根据操作系统自动选择正确的路径分隔符。
import os

base_path = "/home/user"
sub_path = "documents"
file_name = "example.txt"
full_path = os.path.join(base_path, sub_path, file_name)
print(f"完整路径:{full_path}")
  • 路径检查
    • os.path.exists():检查路径是否存在。
      • os.path.isfile():判断路径是否为文件。
      • os.path.isdir():判断路径是否为目录。
    import os
    
    check_path = "/home/user/documents"
    if os.path.exists(check_path):
        print(f"{check_path} 存在")
    else:
        print(f"{check_path} 不存在")
    

四、高级操作:目录遍历与文件系统信息获取

4.1 遍历目录树

  os.walk()函数用于递归遍历目录树,返回当前目录、子目录列表和文件列表。

import os

for root, dirs, files in os.walk("."):
    print(f"当前目录:{root}")
    print(f"子目录:{dirs}")
    print(f"文件:{files}")
    print("-" * 30)

其中:

  • root:当前遍历的目录路径
  • dirs:当前目录下的子目录列表
  • files:当前目录下的文件列表

4.2 获取文件系统信息

  os.statvfs()函数用于获取文件系统的统计信息,如可用空间、总空间等。

import os

file_system_path = "/"
fs_stat = os.statvfs(file_system_path)
print(f"文件系统总空间:{fs_stat.f_frsize * fs_stat.f_blocks} 字节")
print(f"可用空间:{fs_stat.f_frsize * fs_stat.f_bavail} 字节")

返回的fs_stat对象包含多个属性,例如:

  • f_frsize:基本文件系统块大小
  • f_blocks:文件系统总块数
  • f_bfree:空闲块数
  • f_bavail:非超级用户可获取的空闲块数

五、总结

        Python 的os模块提供了一套完整的文件与目录操作工具,从基础的权限检查、文件增删改查,到复杂的目录遍历和文件系统信息获取,都能轻松实现。在实际编程中,合理使用这些方法可以高效处理文件管理任务。同时,建议结合try-except语句进行异常处理,以确保程序在面对文件或目录不存在、权限不足等问题时稳定运行。希望这篇博客能帮助你系统复习os模块的操作方法,在项目开发中灵活运用!

你可能感兴趣的:(Python3教程,microsoft,python,开发语言,网络爬虫,大数据,数据结构,windows)