编写一个Python脚本来遍历指定目录下的所有文件,根据文件的扩展名来创建相应的子文件夹(如果尚不存在的话),然后将文件移动到对应的子文件夹中。同时,我们需要处理重名文件的问题,通过在文件名后添加_
和数字来区分。
下面是一个实现这个功能的Python脚本示例:
import os
import shutil
def move_files_by_extension(directory):
# 遍历指定目录
for root, dirs, files in os.walk(directory):
for file in files:
# 获取文件的完整路径
file_path = os.path.join(root, file)
# 获取文件扩展名
extension = os.path.splitext(file)[1][1:] # 去掉点号
# 构造目标子目录路径
target_dir = os.path.join(root, extension)
# 如果目标子目录不存在,则创建
if not os.path.exists(target_dir):
os.makedirs(target_dir)
# 构造目标文件路径
target_file_path = os.path.join(target_dir, file)
# 如果目标文件已存在,则处理重名问题
if os.path.exists(target_file_path):
# 生成新的文件名,添加_1, _2等以区分重名文件
counter = 1
new_file_name = f"{os.path.splitext(file)[0]}_{counter}{os.path.splitext(file)[1]}"
while os.path.exists(os.path.join(target_dir, new_file_name)):
counter += 1
new_file_name = f"{os.path.splitext(file)[0]}_{counter}{os.path.splitext(file)[1]}"
target_file_path = os.path.join(target_dir, new_file_name)
# 移动文件
shutil.move(file_path, target_file_path)
print(f"Moved {file_path} to {target_file_path}")
# 使用示例
directory_path = '/path/to/your/directory'
move_files_by_extension(directory_path)
注意事项
- 请将
directory_path
替换为你想要遍历的目录的路径。 - 该脚本会递归遍历指定目录及其所有子目录。
- 如果目标文件夹已经存在,脚本将不会重新创建它,直接使用该文件夹。
- 如果目标文件夹中已存在同名文件,脚本将通过在文件名后添加
_
和递增的数字来重命名文件。 - 使用
shutil.move()
函数来移动文件,这个函数如果目标路径已经存在同名文件,则会抛出FileExistsError
异常。为了避免这种情况,脚本会先检查目标文件是否存在,并相应地重命名新文件。 - 脚本会打印出每个被移动文件的原路径和目标路径,以便于追踪和调试。