<p>所以在我读了你们所有人写的东西之后,我理解了我的问题,这次真的修复了代码,它工作得很好
(在字典上发现了另一个我没有注意到的问题)
工作守则:</p>
<pre><code>import hashlib
from os import listdir
from os.path import isfile, join
import os
def getallfolders(dir):
folders = [d for d in os.listdir(dir) if os.path.isdir(os.path.join(dir, d))]
return folders
def getallfiles(dir):
folders = [f for f in listdir(dir) if isfile(join(dir, f))]
return folders
def filehash(file):
BLOCKSIZE = 65536
hasher = hashlib.sha1()
with open(file, "rb") as afile:
buf = afile.read(BLOCKSIZE)
while len(buf) > 0:
hasher.update(buf)
buf = afile.read(BLOCKSIZE)
return hasher.hexdigest()
def double_files(dir):
print dir
mil = {}
folders = getallfolders(dir)
for folder in folders:
newmil = double_files(dir + folder + "\\")
for i in newmil:
if i in mil.keys():
mil[i] = mil[i] + newmil[i]
else:
mil[i] = newmil[i]
files = getallfiles(dir)
for file in files:
fhash = filehash(dir + file)
if fhash in mil.keys():
mil[fhash] = mil[fhash] + [dir + file]
else:
mil[fhash] = [dir + file]
return mil
mil = double_files(u"E:\\not organised\\")
f = open('double_files.txt', 'w')
for i in mil:
if len(mil[i]) > 1:
for y in mil[i]:
f.write(y.encode('utf8')+"\n")
f.write("\n\n")
f.close()
</code></pre>