使用os与shutil执行删除代码未生效,是否误删重要文件?
求助:Python删除文件夹代码执行异常,担心误删文件
我用了从Stack Overflow找到的一段Python代码,想清空指定文件夹的内容,但执行后目标路径里的文件没被删掉,我中途用Ctrl+C终止了程序。现在我特别纠结:既不确定有没有误删重要文件,也搞不懂这段代码到底实际执行了啥,而且我看了回收站,里面啥内容都没有,求帮忙分析!
我用的代码如下:
varpath = 'C:/Users/emili/Desktop/Nueva carpeta (7)/jeje' print('Desea vaciar carpeta'+nameimg+'?\n') print('Escriba Si o No\n') if( input() == 'si'): print('Vaciando carpeta\n') for root, dirs, files in os.walk(varpath): for f in files: os.unlink(os.path.join(root, f)) for d in dirs: shutil.rmtree(os.path.join(root, d))
先给你理清楚代码的实际执行情况:
- 首先,这段代码有个明显的bug:
nameimg变量根本没定义!程序执行到第一行print语句的时候,应该直接抛出NameError报错崩溃了,根本走不到后面的输入判断和删除逻辑。如果你的程序没报错就被你终止了,那大概率是你输入完'si'之后,刚要启动删除流程就被你中断了。 - 另外要注意:
os.unlink()和shutil.rmtree()这两个函数都是直接永久删除文件/文件夹,不会把内容放到回收站,所以你看回收站是空的完全正常,但这也意味着如果代码真的执行了删除,文件就找不回来了。
关于文件是否被误删的判断:
- 先直接打开你的目标路径
C:/Users/emili/Desktop/Nueva carpeta (7)/jeje看看文件还在不在。如果所有文件都完好,那说明代码要么因为nameimg的报错根本没执行到删除步骤,要么刚要开始删除就被你终止了,没造成任何删除操作。 - 如果发现部分文件消失了,那就是删除过程被中断,只完成了一部分删除。但结合你说“目标路径内的文件未被删除”,这种情况概率很低,更大可能是代码连删除的门都没摸到。
给你提个后续的小建议:
以后写这种有风险的操作代码,一定要先做“预览测试”——比如把os.unlink()和shutil.rmtree()换成print(),先打印出要删除的所有文件/文件夹路径,确认是自己想删的内容,再替换成真实的删除命令,这样能避免很多误操作。
内容的提问来源于stack exchange,提问作者EmiliOrtega
相关产品推荐
相关产品推荐

