<p>由于您不想删除目录(从相关评论中可以看出)—</p>
<blockquote>
<p>No i don't want to delete directories</p>
</blockquote>
<p>如果是上述情况,则会出现问题,因为您没有为目录创建filehash。因为当您不为目录创建一个filehash时,您得到的filehash是<code>None</code>,而对于第一个目录,<code>None</code>不在{<cd3>}集中,所以它会将<code>None</code>添加到集合中。从下一个目录开始,它发现<code>None</code>已经存在于<code>set()</code>中,因此它试图在其上使用<code>os.remove()</code>,从而导致问题。在</p>
<p>一个简单的修复方法是在尝试删除和添加到集合之前检查<code>filehash</code>是否是{<cd1>}。示例-</p>
<pre><code>#!/usr/bin/python
import os
import hashlib
import sys
dirname = sys.argv[1]
os.chdir(dirname)
def dup_fileremove(dir):
duplicate = set()
os.chdir(dir)
path=os.getcwd()
print ("The dir is: ", path)
for filename in os.listdir(dir):
filehash = None
filepath=os.path.join(dir, filename)
print("Current file path is: ", filepath)
if os.path.isdir(filepath):
dup_fileremove(filepath)
elif os.path.isfile(filepath):
filehash =hashlib.md5(file(filepath).read()).hexdigest()
if filehash is not None and filehash not in duplicate:
duplicate.add(filehash)
elif filehash is not None:
os.remove(filepath)
print("removed : ", filepath)
dup_fileremove(dirname)
</code></pre>