-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDeleteWithSameNameExcludingExtension.py
More file actions
89 lines (74 loc) · 3.99 KB
/
DeleteWithSameNameExcludingExtension.py
File metadata and controls
89 lines (74 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 请帮我写个中文的 Python 脚本,批注也是中文:
# 在脚本开始前询问我源文件夹位置(默认为 d:\\Works\\Ins\\)与目标文件夹位置(默认为 d:\\Works\\Outs\\)。
# 依次读取目标文件夹的所有文件的文件名,如果源文件夹内存在主名字相同的文件(扩展名可以不同,大小写敏感),则删除源文件的文件。
# 要求如果文件夹内有子文件夹,递归实现。
# 导入模块
import os
def 删除源文件夹中重复文件(源文件夹路径, 目标文件夹路径):
"""
递归遍历目标文件夹,删除源文件夹中同名文件(主文件名相同即可,不考虑扩展名)
:param 源文件夹路径: 需要清理重复文件的源文件夹
:param 目标文件夹路径: 作为参照的目标文件夹
"""
删除文件列表 = [] # 存储所有被删除的文件路径
删除失败列表 = [] # 存储删除失败的文件路径
# 第一步:收集目标文件夹所有文件的主文件名(不含扩展名,大小写敏感)
目标文件主名集合 = set()
for 当前路径, _, 文件列表 in os.walk(目标文件夹路径):
for 文件名 in 文件列表:
# 分离文件名和扩展名,只取主文件名
主文件名, _ = os.path.splitext(文件名)
目标文件主名集合.add(主文件名) # 只添加主文件名
# 第二步:遍历源文件夹并删除重复文件
for 当前路径, _, 文件列表 in os.walk(源文件夹路径):
for 文件名 in 文件列表:
源文件路径 = os.path.join(当前路径, 文件名)
# 分离源文件的主文件名
源文件主名, _ = os.path.splitext(文件名)
# 检查目标文件夹是否有相同主文件名的文件
if 源文件主名 in 目标文件主名集合:
try:
os.remove(源文件路径)
删除文件列表.append(源文件路径)
except Exception as e:
删除失败列表.append((源文件路径, str(e)))
# 输出统计结果
print("\n" + "="*50)
print(f"操作完成! 共删除 {len(删除文件列表)} 个文件")
# 显示删除的文件列表
if 删除文件列表:
print("\n已删除文件列表:")
for i, 文件路径 in enumerate(删除文件列表, 1):
print(f"{i}. {文件路径}")
# 显示删除失败的文件列表
if 删除失败列表:
print(f"\n删除失败文件 ({len(删除失败列表)} 个):")
for i, (文件路径, 错误信息) in enumerate(删除失败列表, 1):
print(f"{i}. {文件路径} - 错误: {错误信息}")
# 显示目标文件夹统计
print("\n" + "-"*50)
print(f"目标文件夹文件总数: {len(目标文件主名集合)}")
print(f"成功删除文件数: {len(删除文件列表)}")
print(f"删除失败文件数: {len(删除失败列表)}")
print("="*50)
if __name__ == "__main__":
# 获取用户输入(带默认值)
源文件夹 = input("请输入源文件夹路径 (默认 d:\\Works\\Ins\\): ") or "d:\\Works\\Ins\\"
目标文件夹 = input("请输入目标文件夹路径 (默认 d:\\Works\\Outs\\): ") or "d:\\Works\\Outs\\"
# 标准化路径
源文件夹 = os.path.normpath(源文件夹)
目标文件夹 = os.path.normpath(目标文件夹)
# 验证路径有效性
if not os.path.exists(源文件夹):
print(f"错误: 源文件夹不存在 [{源文件夹}]")
exit(1)
if not os.path.exists(目标文件夹):
print(f"错误: 目标文件夹不存在 [{目标文件夹}]")
exit(1)
# 执行清理操作
print(f"\n开始清理: {源文件夹}")
print(f"参照目录: {目标文件夹}")
删除源文件夹中重复文件(源文件夹, 目标文件夹)
# 程序结束前暂停(Windows系统)
if os.name == 'nt':
input("\n按回车键退出...")