今天想删除E盘根目录下的一个文件夹(新建文件夹),这个文件夹里有一个文件(360safe)。
然后直接用的
import os
path = 'E:/新建文件夹'
os.rmdir(path)
运行后报错如下:
Traceback (most recent call last):
File "F:\pythonProject\youyou\demo.py", line 7, in
os.rmdir(path)
OSError: [WinError 145] 目录不是空的。: 'E:/新建文件'
进程已结束,退出代码为 1
报错是因为目录不是空的,也就是说,用Python中的‘os.rmdir’删除文件夹的前提是文件夹必须为空。
于是百度了一下,发现了一个教程给了如下的代码:我只读懂了前半部分,后面的看不懂了。
import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
for path in paths:
filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
if os.path.isfile( filePath ):#见第8行
try:
os.remove( filePath )#删除
except os.error:#后边这些都看不懂喽
autoRun.exception( "remove %s error." %filePath )#引入logging
elif os.path.isdir( filePath ):
if filePath[-4:].lower() == ".svn".lower():
continue
shutil.rmtree(filePath,True)
return True
Dir = 'E:/新建文件夹'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)
运行后,发现E盘新建文件夹下的360sef文件被删除了,但是新建文件夹还在,也就是说上面这些代码的运行后,就是把Dir设置的文件夹下的所有文件删除,为了验证,我又在这个新建文件夹里放了一些文件,然后运行代码,发现果然被删除了。
上面的代码运行完,文件夹里的内容被删除了,那么现在这个文件夹就变成空文件夹了,这时候再用‘os.rmdir’来删除这个文件夹就可以了吧,
在上面这个代码的后面加一句
os.rmdir(Dir)
这样这个文件夹不就被删除了吗,试了一下,果然可以,于是就有了下面的代码
功能是,删除指定的一个文件夹,包括文件夹里所有的内容,大家直接复制拿去用就可以,只需要将Dir的值改成自己要删除的文件夹路径就可以了。代码如下
# coding=utf-8
# 龟仙岛
# 自学Python,求师指点
# 开发时间:2021/8/17 14:13
import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
for path in paths:
filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
if os.path.isfile( filePath ):#见第8行
try:
os.remove( filePath )#删除
except os.error:#后边这些都看不懂喽
autoRun.exception( "remove %s error." %filePath )#引入logging
elif os.path.isdir( filePath ):
if filePath[-4:].lower() == ".svn".lower():
continue
shutil.rmtree(filePath,True)
return True
Dir = 'E:/新建文件夹'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)#删除文件夹下所有文件
os.rmdir(Dir))#删除文件夹
测试了几个文件夹,都成功了,但是又遇到了问题,我在E盘根目录下新建了一个叫001的文件,然后把上面的代码Dir改成=‘E:/001’,发现/001不是绿色的了,我知道要出问题了,运行了一下,果然报错了,报错如下:
Traceback (most recent call last):
File "F:\pythonProject\ceshi.py", line 24, in
os.rmdir(Dir)
OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: 'E:\x01'
进程已结束,退出代码为 1
报错的原因是文件名文件名、目录名或卷标语法不正确,也就是说这个代码无法删除数字(起码是部分)数字开头的文件夹,于是我又试了试,把文件夹名改成了a001或n001等等,都是报错如上。
这时候我想起了'\'在Python中经常会让一些字符串改变,只要在变量前加个字母r,就可以不让它变了,那么把Dir=‘文件夹路径’改成Dir=r‘文件夹路径’那不就解决了。
于是试了一下,果然可以了,无论文件夹命名是什么,都可以删除了,这次代码完美了,删除指定的文件夹,及文件夹下所有文件的Python全部代码如下:
import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
for path in paths:
filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
if os.path.isfile( filePath ):#见第8行
try:
os.remove( filePath )#删除
except os.error:#后边这些都看不懂喽
autoRun.exception( "remove %s error." %filePath )#引入logging
elif os.path.isdir( filePath ):
if filePath[-4:].lower() == ".svn".lower():
continue
shutil.rmtree(filePath,True)
return True
Dir = r'E:\001'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)
os.rmdir(Dir)
但是问题又来了,当有这个文件夹的时候,可以删除文件夹和文件夹下所有文件,但是当没有文件夹的时候,运行又报错
Traceback (most recent call last):
File "F:\pythonProject\ceshi.py", line 24, in
os.rmdir(Dir)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'E:\\001'
进程已结束,退出代码为 1
于是我就想,如果有这个文件夹,那么我们就删这个文件夹,如果没有这个文件夹,就提示没有这个文件夹,这样就不会报错了,于是自己研究了一下,修改了一下代码如下:
import os # 引入库
import shutil # 引入库
Dir = r'E:\sai' # 这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
if os.path.isdir(Dir)==0:
print('你逗我呢,没有这个文件夹')
quit()
else:
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
for path in paths:
filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
if os.path.isfile( filePath ):#见第8行
try:
os.remove( filePath )#删除
except os.error:#后边这些都看不懂喽
autoRun.exception( "remove %s error." %filePath )#引入logging
elif os.path.isdir( filePath ):
if filePath[-4:].lower() == ".svn".lower():
continue
shutil.rmtree(filePath,True)
return True
CleanDir(Dir)#删除文件夹下的文件
os.rmdir(Dir)#删除文件夹
print('删除文件夹完毕')