<p>你真的很幸运你收到了错误消息,否则你的代码会删除目录!在</p>
<p>问题是after control从递归调用返回</p>
<p><code>dup_fileremove(filepath)</code></p>
<p>然后继续</p>
<p><code>if filehash not in duplicate:</code></p>
<p>你不想那样!在</p>
<p>解决这个问题的一个简单方法是在<code>dup_fileremove(filepath)</code>后面放一个<code>continue</code>语句。在</p>
<p>但是一个更好的方法是缩进<code>if filehash not in duplicate:</code>内容,使其与<code>filehash = hashlib.md5(file(filepath).read()).hexdigest()</code>行对齐。在</p>
<p>例如:</p>
<pre><code>#!/usr/bin/python
import os
import hashlib
import sys
def dup_fileremove(dirname):
duplicate = set()
os.chdir(dirname)
path=os.getcwd()
print ("The dirname is: ", path)
for filename in os.listdir(dirname):
filehash = None
filepath=os.path.join(dirname, 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 not in duplicate:
duplicate.add(filehash)
else:
os.remove(filepath)
print("removed : ", filepath)
dirname = sys.argv[1]
os.chdir(dirname)
dup_fileremove(dirname)
</code></pre>
<p>我还没有测试你代码的这个修改版本。它看起来很好,但我不能保证。:)</p>
<p>顺便说一句,建议不要直接使用<code>file()</code>类来打开文件。在python3中,<code>file()</code>已经不存在了,但是即使在Python中,文档至少从python2.5(如果不是更早的话)就建议使用<code>open()</code>函数。在</p>