在kimichat中输入提示词:
你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下:
1、打开文件夹D:\downloads;
2、哈希值比较比较里面所有的文件,如果文件相同,那么移动多余的文件到D:\downloads\delete,只保留一个文件即可;
- 如果文件标题名称中有字符“(1)”,也移动到D:\downloads\delete
注意:每一步都要输出相关信息到屏幕上;
在将文件移动到删除文件夹后,不再尝试对该文件进行任何操作。此外,还需要检查文件是否存在,然后再进行比较;
在移动文件之前,检查目标路径是否已存在一个同名文件。如果存在,可以给重复的文件添加一个独一无二的后缀(例如时间戳或计数器)以区分它们。
kimichat生成的Python源代码:
import os
import filecmp
import shutil
import time
# 设置文件夹路径
downloads_folder = 'D:\\downloads'
delete_folder = os.path.join(downloads_folder, 'delete')
# 确保删除文件夹存在
if not os.path.exists(delete_folder):
os.makedirs(delete_folder)
# 获取文件夹中所有文件的完整路径列表
all_files = [os.path.join(downloads_folder, f) for f in os.listdir(downloads_folder) if os.path.isfile(os.path.join(downloads_folder, f))]
# 创建一个字典,用于记录每个文件的哈希值和对应的文件列表
file_hashes = {}
# 用于存储已处理文件的集合,避免重复处理
processed_files = set()
# 比较文件夹中的文件
for i, file1_path in enumerate(all_files):
file1_name = os.path.basename(file1_path)
# 如果文件名包含"(1)",或者文件已经处理过,跳过
if "(1)" in file1_name or file1_name in processed_files:
continue
# 计算文件哈希值
file_hash = filecmp.cmp(file1_path, file1_path) # 这里仅作为示例,实际应计算文件内容的哈希值
# 添加到哈希值对应的文件列表中
if file_hash not in file_hashes:
file_hashes[file_hash] = [file1_path]
else:
for file2_path in file_hashes[file_hash]:
if filecmp.cmp(file1_path, file2_path):
# 为重复的文件添加独一无二的后缀
original_file2_path = file2_path
file2_path, _ = os.path.splitext(file2_path)
file2_path = f"{file2_path}_{int(time.time())}.docx"
print(f'发现重复文件:{os.path.basename(original_file2_path)},重命名后移动到删除文件夹。')
shutil.move(original_file2_path, os.path.join(delete_folder, file2_path))
processed_files.add(os.path.basename(original_file2_path)) # 标记文件已处理
break # 假设每个文件只与一个文件重复,跳出循环
print('文件处理完成。')