根据文件大小和名称字典检查重复文件

时间:2016-03-26 08:37:05

标签: python-2.7 dictionary

这是非常简单的代码 - 我刚刚完成了Charles Severances Python for Informatics课程,所以如果可能的话,请帮助我保持简单。

我正在尝试在文件夹中找到重复的文档。 我遇到的问题是打印原件和副本,以便我可以手动检查它找到的准确性。稍后我会看看如何自动删除重复项,寻找其他文件类型等。

类似结构的代码片段适用于itunes,但在这里我将原件放入字典中,似乎我没有收到信息。

请保持简单,这样我就可以学习。我知道我可以复制代码来完成工作,但我更有兴趣了解我出错的地方。

欢呼声 杰夫

import os
from os.path import join
import re
import hashlib
location = '/Users/jeff/desktop/typflashdrive'
doccount = 0
dupdoc = 0

d = dict()

for (dirname, dirs, files) in os.walk(location):
    for x in files:
        size = hashlib.md5(x).hexdigest()
        item = os.path.join(dirname,x)
        #print os.path.getsize(item), item

        #size = os.path.getsize(item)

        if item.endswith ('.doc'):
            doccount = doccount + 1
            if size not in d:
                original = item
                d[size] = original
            else:
                copy = item
                for key in d: print key, d[size],'\n', size, copy,'\n','\n',
                #print item,'\n', copy,'\n','\n',
                dupdoc=dupdoc+1
print '.doc Files:', doccount,'.', 'You have', dupdoc, 'duplicate .doc files:', 

1 个答案:

答案 0 :(得分:2)

你最大的错误就是你正在使用文件名的哈希值而不是文件内容。

我已经纠正了这个问题并清理了剩下的代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <description>eclipse</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"
                               level="asInvoker"
                               ms_asmv3:uiAccess="false">
                </requestedExecutionLevel>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>