去除父文件夹层级
文章信息
创建日期:2025年1月13日
前两天在备寒假班的课程,主要就是收集课程资料。从学科网上下载的文件夹有时候会分成好几个文件夹层级,比如:
九年级同步练习题
├── Unit1 第一课时 同步练习
│ ├── Unit1 第一课时 同步练习(原卷版).docx
│ └── Unit1 第一课时 同步练习(解析版).docx
├── Unit1 第二课时 同步练习
│ ├── Unit1 第二课时 同步练习(原卷版).docx
│ └── Unit1 第二课时 同步练习(解析版).docx
└── ……此处省略无数个文件夹目录
为了后续的操作,我不得不把所有的文件放在同一级文件目录中。下面的代码就是为了实现这样的功能:
import os
import shutil
def move_files_to_single_folder(source_dir, target_dir):
"""
将源目录下所有文件移动到目标目录中(包括子文件夹中的文件)。
:param source_dir: 源目录路径
:param target_dir: 目标目录路径
"""
if not os.path.exists(target_dir):
os.makedirs(target_dir)
for root, _, files in os.walk(source_dir):
for file in files:
source_file_path = os.path.join(root, file)
target_file_path = os.path.join(target_dir, file)
# 如果目标目录中存在同名文件,进行重命名
if os.path.exists(target_file_path):
base, ext = os.path.splitext(file)
counter = 1
while os.path.exists(target_file_path):
new_file_name = f"{base}_{counter}{ext}"
target_file_path = os.path.join(target_dir, new_file_name)
counter += 1
# 移动文件
shutil.move(source_file_path, target_file_path)
print(f"已移动文件: {source_file_path} -> {target_file_path}")
print("文件移动完成!")
# 示例使用
if __name__ == "__main__":
source_directory = input("请输入源目录路径:").strip()
target_directory = input("请输入目标目录路径:").strip()
if os.path.exists(source_directory):
move_files_to_single_folder(source_directory, target_directory)
else:
print("源目录不存在,请检查路径!")
刚刚的文件夹目录在脚本处理过后就会变成:
九年级同步练习题
├── Unit1 第一课时 同步练习(原卷版).docx
├── Unit1 第一课时 同步练习(解析版).docx
├── Unit1 第二课时 同步练习(原卷版).docx
├── Unit1 第二课时 同步练习(解析版).docx
└── ……此处省略无数个docx文件