iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Python寻找重复文件并删除的脚本写法
  • 925
分享到

如何用Python寻找重复文件并删除的脚本写法

2023-06-28 23:06:18 925人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这期内容当中小编将会给大家带来有关如何用python寻找重复文件并删除的脚本写法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录

这期内容当中小编将会给大家带来有关如何用python寻找重复文件并删除的脚本写法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样。在文件较少的情况下,该类情况还比较容易处理,最不济就是one by one的人工比较,即便如此,也很难保证你的眼神足够犀利。倘若文件很多,这岂不是个impossible mission?

下面脚本主要包括以下模块:diskwalk,chechsum,find_dupes,delete。其中diskwalk模块是遍历文件的,给定路径,遍历输出该路径下的所有文件。chechsum模块是求文件的md5值。find_dupes导入了diskwalk和chechsum模块,根据md5的值来判断文件是否相同。delete是删除模块。具体如下:

diskwalk.py

import os,sysclass diskwalk(object):        def __init__(self,path):                self.path = path        def paths(self):                path=self.path                path_collection=[]                for dirpath,dirnames,filenames in os.walk(path):                        for file in filenames:                                fullpath=os.path.join(dirpath,file)                                path_collection.append(fullpath)                return path_collectionif __name__ == '__main__':        for file in diskwalk(sys.argv[1]).paths():                print file

chechsum.py

import hashlib,sysdef create_checksum(path):    fp = open(path)    checksum = hashlib.md5()    while True:        buffer = fp.read(8192)        if not buffer:break        checksum.update(buffer)    fp.close()        checksum = checksum.digest()    return checksumif __name__ == '__main__':        create_checksum(sys.argv[1])

find_dupes.py

from checksum import create_checksumfrom diskwalk import diskwalkfrom os.path import getsizeimport sysdef findDupes(path):    record = {}    dup = {}    d = diskwalk(path)    files = d.paths()    for file in files:        compound_key = (getsize(file),create_checksum(file))        if compound_key in record:            dup[file] = record[compound_key]            else:            record[compound_key]=file    return dupif __name__ == '__main__':    for file in  findDupes(sys.argv[1]).items():        print "The duplicate file is %s" % file[0]        print "The original file is %s\n" % file[1]

findDupes函数返回了字典dup,该字典的键是重复的文件,值是原文件。这样就解答了很多人的疑惑,毕竟,你怎么确保你输出的是重复的文件呢?

delete.py

import os,sysclass deletefile(object):    def __init__(self,file):        self.file=file    def delete(self):        print "Deleting %s" % self.file        os.remove(self.file)    def dryrun(self):        print "Dry Run: %s [NOT DELETED]" % self.file    def interactive(self):        answer=raw_input("Do you really want to delete: %s [Y/N]" % self.file)        if answer.upper() == 'Y':            os.remove(self.file)        else:            print "Skiping: %s" % self.file        returnif __name__ == '__main__':    from find_dupes import findDupes        dup=findDupes(sys.argv[1])    for file in dup.iterkeys():        delete=deletefile(file)        #delete.dryrun()          delete.interactive()        #delete.delete()

deletefile类构造了3个函数,实现的都是文件删除功能、其中delete函数是直接删除文件,dryrun函数是试运行,文件并没有删除,interactive函数是交互模式,让用户来确定是否删除。这充分了考虑了客户的需求。

总结:这四个模块已封装好,均可单独使用实现各自的功能。组合起来就可批量删除重复文件,只需输入一个路径。

最后,贴个完整版本的,兼容Python 2.0, 3.0。

#!/usr/bin/python# -*- coding: UTF-8 -*-from __future__ import print_functionimport os, sys, hashlibclass diskwalk(object):    def __init__(self, path):        self.path = path    def paths(self):        path = self.path        files_in_path = []        for dirpath, dirnames, filenames in os.walk(path):            for each_file in filenames:                fullpath = os.path.join(dirpath, each_file)                files_in_path.append(fullpath)        return files_in_pathdef create_checksum(path):    fp = open(path,'rb')    checksum = hashlib.md5()    while True:        buffer = fp.read(8192)        if not buffer: break        checksum.update(buffer)    fp.close()    checksum = checksum.digest()    return checksumdef findDupes(path):    record = {}    dup = {}    d = diskwalk(path)    files = d.paths()    for each_file in files:        compound_key = (os.path.getsize(each_file), create_checksum(each_file))        if compound_key in record:            dup[each_file] = record[compound_key]        else:            record[compound_key] = each_file    return dupclass deletefile(object):    def __init__(self, file_name):        self.file_name = file_name    def delete(self):        print("Deleting %s" % self.file_name)        os.remove(self.file_name)    def dryrun(self):        print("Dry Run: %s [NOT DELETED]" % self.file_name)    def interactive(self):        try:            answer = raw_input("Do you really want to delete: %s [Y/N]" % self.file_name)        except NameError:            answer = input("Do you really want to delete: %s [Y/N]" % self.file_name)        if answer.upper() == 'Y':            os.remove(self.file_name)        else:            print("Skiping: %s" % self.file_name)        returndef main():    directory_to_check = sys.argv[1]    duplicate_file = findDupes(directory_to_check)    for each_file in duplicate_file:        delete = deletefile(each_file)        delete.interactive()if __name__ == '__main__':    main()

其中,第一个参数是待检测的目录。

上述就是小编为大家分享的如何用Python寻找重复文件并删除的脚本写法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网Python频道。

--结束END--

本文标题: 如何用Python寻找重复文件并删除的脚本写法

本文链接: https://www.lsjlt.com/news/321263.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用Python寻找重复文件并删除的脚本写法
    这期内容当中小编将会给大家带来有关如何用Python寻找重复文件并删除的脚本写法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录...
    99+
    2023-06-28
  • 教你用Python寻找重复文件并删除的脚本写法
    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样。在文件较少的情况下,该类情况还比较容易处理,最不济...
    99+
    2022-11-13
  • Linux中如何使用FSlint查找和删除重复文件
    本篇内容主要讲解“Linux中如何使用FSlint查找和删除重复文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux中如何使用FSlint查找和删除重复文件”吧!FSlint 能够找出系...
    99+
    2023-06-27
  • 利用Python删除电脑中重复文件的方法
    目录一、前言二、练习三、代码演示四、总结一、前言 在生活中,我们经常会遇到电脑中文件重复的情况。在文件较少的情况下,这类情况还比较容易处理,最不济就是一个个手动对比删除;而在重复文件...
    99+
    2022-11-11
  • 详解如何使用Python实现删除重复文件
    目录Python自动化办公之删除重复文件思路介绍源码解说知识拓展Python自动化办公之删除重复文件 思路介绍 两层判断: 1.先判断文件大小是否为相同,大小不同则不是重复文件,予以...
    99+
    2022-11-11
  • 如何使用vbs脚本定时删除N天前的文件
    这篇文章主要讲解了“如何使用vbs脚本定时删除N天前的文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用vbs脚本定时删除N天前的文件”吧!脚本放在定时任务里代替服务定时执行一些操作...
    99+
    2023-06-08
  • 在Linux中如何使用Bash脚本删除早于 “X” 天的文件/文件夹
    小编给大家分享一下在Linux中如何使用Bash脚本删除早于 “X” 天的文件/文件夹,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1)在 Linux 中删除早于...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作