10 行 Python 代码自动清理电脑内重复文件,解放双手!

AirPython

共 2057字,需浏览 5分钟

 ·

2020-08-27 20:55


前言

今天分享一个系统层面的自动化案例:

「给定一个文件夹,使用 Python 检查给定文件夹下有无文件重复,若存在重复则删除」

主要涉及的知识点有:

  • os 模块综合应用
  • glob 模块综合应用
  • 利用 filecmp 模块比较两个文件

步骤分析

该程序实现的逻辑可以具化为:

遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者。

实现问题的关键就变成了:

如何判断两个文件是否相同?

在这里我们可以使用 filecmp 模块,来看看官方的介绍文档:

  • filecmp.cmp(f1, f2, shallow=True)

  • 比较名为 f1 和 f2 的文件,如果它们似乎相等则返回 True,否则返回 False

  • 如果 shallow 为真,那么具有相同 os.stat() 签名的文件将会被认为是相等的;否则,将比较文件的内容。

所以可以这样使用:

# 假设x和y两个文件是相同的
print(filecmp.cmp(x, y))
# True

解决了这个问题,我们就可以开始写代码了!

Python 实现

导入需要的库并设置目标文件夹路径

import os
import glob
import filecmp

dir_path = r'C:\\xxxx'

接着遍历获取所有文件的绝对路径,我们可以利用 glob 模块的通配符结合 recursive 参数即可完成,代码如下:

for file in glob.glob(path + '/**/*', recursive=True):
    pass

由于遍历获取每一个文件或者文件夹后,需要判断是否是文件,如果是文件则可能将绝对路径存放到列表中

这里需要再完成两个事情:

  1. 首先创建一个空列表,后面用 list.append(i) 添加文件路径

  2. 接着利用 os.path.isfile(i) 判断是否是文件,返回 True 则执行添加元素的操作

具体代码如下:

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 os
import glob
import filecmp

dir_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)

写在最后

通过本文的 Python 自动化脚本制作过程,我们可以再次体会Python办公自动化的强大

今天的文章就到这里,原创不易,如果喜欢的话请给我一波三连支持吧(在看、转发、留言)



推荐阅读


带你用 Python 实现自动化群控(入门篇)

Python 自动化,Appium 凭什么使用 UiAutomator2?

Python 自动化,Helium 凭什么取代 Selenium?




浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报