0. shutil 模块 操作文件

# shutil 模块是基于高级文件操作库 os 模块构建的,提供了更高级别的文件操作接口,使文件和目录的处理更加方便。

# 通过 shutil 模块,可以执行以下操作:
# 复制文件和目录。
# 移动文件和目录。
# 重命名文件和目录。
# 删除文件和目录。
# 创建和删除目录。
# 执行文件操作的递归操作。
# 更多与文件和目录操作相关的功能。

import shutil,os

# 创建目录
shutil.mkdir("new_directory")

# 复制文件
shutil.copy("source_file.txt", "destination_file.txt")

# 复制目录
shutil.copytree("source_directory", "destination_directory")

# 移动文件
shutil.move("source_file.txt", "destination_file.txt")

# 移动目录
shutil.move("source_directory", "destination_directory")

# 重命名文件
shutil.move("old_file.txt", "new_file.txt")

# 重命名目录
shutil.move("old_directory", "new_directory")

# 删除文件
shutil.remove("file_to_delete.txt")

# 删除目录及其内容
shutil.rmtree("directory_to_delete")

# 删除目录中的文件,保留目录结构
for root, dirs, files in os.walk("directory_to_clean"):
    for file in files:
        file_path = os.path.join(root, file)
        os.remove(file_path)

# 递归复制
# 源目录和目标目录
source_directory = "source_directory"
destination_directory = "destination_directory"
# 使用 copytree 复制源目录到目标目录 source_directory 中的所有内容(包括子目录和文件)都会被递归复制到 destination_directory。可以在文件操作中保持目录结构的完整性。
shutil.copytree(source_directory, destination_directory)
print(f"Directory '{source_directory}' has been recursively copied to '{destination_directory}'.")

# 递归移动
# 源目录或文件和目标目录或文件
source = "source_path"
destination = "destination_path"
# 使用 move 函数递归移动源到目标 source 可以是文件或目录,它及其内容将被递归地移动到 destination。如果 destination 是目录,那么 source 将成为 destination 目录的子目录。如果 destination 是文件路径,那么 source 将被移动并重命名为 destination。
shutil.move(source, destination)
print(f"'{source}' has been recursively moved to '{destination}'.")

# 递归删除
# 要删除的目录
directory_to_delete = "directory_to_delete"
# 使用 rmtree 函数递归删除目录及其内容 shutil.rmtree 函数会删除 directory_to_delete 目录以及其中的所有子目录和文件。这是一个非常有用的功能,特别需要清理或卸载不再需要的目录时。
shutil.rmtree(directory_to_delete)
print(f"Directory '{directory_to_delete}' has been recursively deleted.")

# 示例应用:备份文件
import shutil
import os
import time

# 源目录和目标目录
source_directory = "source_data"
backup_directory = "backup_data"

# 创建目标目录(如果不存在)
if not os.path.exists(backup_directory):
    os.makedirs(backup_directory)

# 获取当前日期作为备份文件夹名称
backup_folder = time.strftime("%Y-%m-%d")

# 创建以当前日期为名称的备份子目录
backup_path = os.path.join(backup_directory, backup_folder)
os.makedirs(backup_path)

# 复制源目录中的内容到备份目录
shutil.copytree(source_directory, os.path.join(backup_path, source_directory))