Skip to content

文件夹和文件操作

在编写 Python 程序时,操作文件和目录是常见的任务之一。理解和使用相对路径和绝对路径是操作文件和目录的基础。

相对路径与绝对路径

  1. 绝对路径(Absolute Path)

绝对路径是从根目录开始的完整路径,指定了文件或目录在文件系统中的唯一位置。

示例: 在 Windows 上,绝对路径可能是:

C:\Users\Username\Documents\example.txt

在 Unix/Linux 或 macOS 上,绝对路径可能是:

/home/username/Documents/example.txt

Python 代码示例:

python

import os
absolute_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1"

# 检查路径是否存在。在操作文件或目录之前,检查路径是否存在是个好习惯
if os.path.exists(absolute_path):
    print('绝对路径存在')
  1. 相对路径(Relative Path)

相对路径是相对于当前工作目录(Current Working Directory, CWD)的路径。相对路径简洁,通常用于访问程序所在目录的文件。

获取当前工作目录:

python

import os

current_directory = os.getcwd()
print("当前工作目录是:", current_directory)

以下是相对路径:

新建文件夹1

Python 代码示例:

python

import os

relative_path  = "新建文件夹1"
if os.path.exists(relative_path):
    print('相对路径存在')
  1. 设置当前工作目录:
python

import os

os.chdir("C:\\")
print("当前工作目录已更改为:", os.getcwd())
  1. 生成绝对路径

有时候我们需要将相对路径转换为绝对路径,可以使用 os.path 模块中的 abspath() 方法。

python

relative_path = "新建文件夹1"
absolute_path = os.path.abspath(relative_path)
print("绝对路径是:", absolute_path)

创建目录

python

import os

os.makedirs("C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2\\新建文件夹3", exist_ok=True)
print("目录已创建。")

exist_ok 参数:exist_ok=False(默认值): 如果目标目录已经存在,os.makedirs() 会引发 FileExistsError 异常。exist_ok=True: 如果目标目录已经存在,则不会引发异常。os.makedirs() 会正常执行而不进行任何操作,因为目标目录已存在。

删除目录

在 Python 中删除文件夹有几种不同的方法,取决于文件夹是否为空和你使用的 Python 版本。以下是常见的删除文件夹的方式:

  1. 使用 os.rmdir() 删除空文件夹

os.rmdir() 只能删除空文件夹。如果文件夹不为空,会引发 OSError。

示例:

python

import os

folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2\\新建文件夹3"
try:
    os.rmdir(folder_path)
    print("空文件夹已删除。")
except OSError as e:
    print(f"删除失败:{e}")
  1. 使用 os.removedirs() 删除嵌套空文件夹

os.removedirs() 用于递归删除空文件夹,但它只能在删除的每个文件夹都为空时成功。

python

import os

nested_folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2"
try:
    os.removedirs(nested_folder_path)
    print("嵌套的空文件夹已删除。")
except OSError as e:
    print(f"删除失败:{e}")
  1. 使用 shutil.rmtree() 删除非空文件夹

shutil.rmtree() 用于删除非空文件夹及其内容,包括所有子目录和文件。它是删除目录的更常用方法。

示例:

python

import shutil

folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹4\\新建文件夹5"

# 删除文件夹时,可能会遇到权限错误、文件夹不存在等问题。使用异常处理来处理这些情况:
try:
    shutil.rmtree(folder_path)
    print("文件夹及其内容已删除。")
except FileNotFoundError as e:
    print(f"删除失败:{e}")
except PermissionError as e:
    print(f"权限错误:{e}")
except Exception as e:
    print(f"发生错误:{e}")

删除文件

python

import os

file_path = "C:\\Users\\Administrator\\\Desktop\\1.txt"
if os.path.exists(file_path):
    os.remove(file_path)
    print("文件已删除。")

遍历目录

  • 遍历目录中的所有文件和子目录。不递归,仅列出当前目录的内容。
python

import os

directory_contents = os.listdir("C:\\Users\\Administrator\\\Desktop")
print("目录内容:", directory_contents)
  • 递归遍历目录中的所有文件和子目录。
python

import os

# 设置要遍历的根目录路径
root_dir = 'C:\\Users\\Administrator\\\Desktop'

# os.walk()是Python中的一个函数,用于遍历一个目录及其所有子目录,返回一个生成器。这个生成器会产生一个三元组(root, dirs, files),其中root表示当前正在遍历的目录,dirs表示该目录下的所有子目录名,files表示该目录下的所有文件名。
for root, dirs, files in os.walk(root_dir):
    print(f"当前目录:{root}")
    
    # 打印所有子目录
    if dirs:
        print("子目录:")
        for dir_name in dirs:
            print(f"  {dir_name}")
    else:
        print("没有子目录。")
    
    # 打印所有文件
    if files:
        print("文件:")
        for file_name in files:
            print(f"  {file_name}")
    else:
        print("没有文件。")
    
    print()  # 输出空行分隔不同目录

Released under the MIT License