来源|早期Python
Toutu |视觉。。
前言大家好,又是Python办公自动化系列。
今天分享一个系统级自动化案例:
给定一个文件夹,使用Python检查给定文件夹中是否有重复文件,如果有,则删除它们
涉及的主要知识点有:
操作系统模块的综合应用
glob模块的综合应用
用filecmp模块比较两个文件。
步骤分析该程序实现的逻辑可以体现为:
遍历给定文件夹中的所有文件,然后通过嵌套循环成对比较文件,如果相同就删除后者。
意识到这个问题的关键就变成了
如何判断两个档案是否相同?
这里我们可以使用filecmp模块来查看官方介绍文档:
filecmp.cmp(f1, f2, shallow=True)
比较名为f1和f2的文件,如果它们似乎相等,则返回True,否则返回False。
如果shallow为true,则具有相同os.stat签名的文件将被视为相等。否则,将比较文件的内容。
所以可以这样用。
#假设两个文件X和Y是相同的print(filecmp.cmp(x,y))# True
解决了这个问题,我们就可以开始写代码了!
Python实现了导入所需的库并设置目标文件夹路径。
import osimport globimport filecmpdir_path=r'C:\\xxxx'
然后遍历得到所有文件的绝对路径,我们可以使用glob模块的通配符结合递归参数来完成。框架如下:
for file in glob.glob(path + '/**/*', recursive=True): pass
因为遍历每个文件或文件夹后,需要判断是否是文件。如果是文件,绝对路径可以存储在列表中。这里,需要完成两件事:
首先,创建一个空列表,然后用list.append(i)添加文件路径。
然后用os.path.isfile(i)判断是否是文件,如果是,则添加一个元素。
具体代码如下
file_lst=for i in glob.glob(dir_path + '/**/*', recursive=True): if os.path.isfile(i): file_lst.append(i)
上一步我们获取了目标文件夹中的所有文件路径,然后可以嵌套遍历这个路径列表,其中filecmp.cmp判断文件,os.remove删除文件。
for x in file_lst: for y in file_lst: if x !=y: if filecmp.cmp(x, y): os.remove(y)
这里的代码实现了一般的逻辑,但是有一个细节需要考虑:有可能循环到之前判断已经删除的文件,导致os.remove(file)报错,因为该文件不存在。
因此,可以使用os.path.exists来判断文件是否存在,如下所示:
for x in file_lst: for y in file_lst: if x !=y and os.path.exists(x) and os.path.exists(y): if filecmp.cmp(x, y): os.remove(y)
这样,一个简单的文件重复数据删除小程序就完成了,完整的代码如下:
import osimport globimport filecmpdir_path=r'C:\xxxx'file_lst=for i in glob.glob(dir_path + '/**/*', recursive=True): if os.path.isfile(i): file_lst.append(i)for x in file_lst: for y in file_lst: if x !=y and os.path.exists(x) and os.path.exists(y): if filecmp.cmp(x, y): os.remove(y)
标题:10 行 Python 代码自动清理电脑内重复文件,解放双手
链接:https://www.52hkw.com/news/rj/63034.html
版权:文章转载自网络,如有侵权,请联系删除!