文章目录
1. 按2. 实际运用
1. 按
有时候我们使用shutil.rmtree()、os.rmdir()、os.remove()删除文件时会报[WinError 5] 拒绝访问的错误: 如使用os.remove()删除当前文件夹下的'PackageCache\\com.unity.textmeshpro@1.3.0\\Tests\\Editor.meta'时提示
[WinError 5] 拒绝访问。: ‘PackageCache\com.unity.textmeshpro@1.3.0\Tests\Editor.meta’
这个时候我们可以让Python运行cmd命令强制删除此文件:
import os
os
.system
('del "PackageCache\com.unity.textmeshpro@1.3.0\Tests\Editor.meta" /F')
关于使用CMD命令删除文件或文件夹,可以参考:Windows CMD删除文件或文件夹命令帮助
2. 实际运用
import os
import shutil
dirs
= ['.idea', '.vs', 'Logs', 'obj']
files
= ['.sln', '.csproj']
dirsCnt
= 0
filesCnt
= 0
def delWithCmd(path
):
try:
if os
.path
.isfile
(path
):
cmd
= 'del "'+ path
+ '" /F'
print(cmd
)
os
.system
(cmd
)
except Exception
as e
:
print(e
)
def deleteDir(dirPath
):
global dirsCnt
global filesCnt
for root
, dirs
, files
in os
.walk
(dirPath
, topdown
=False):
for name
in files
:
try:
filesCnt
+= 1
filePath
= os
.path
.join
(root
, name
)
print('file deleted', filesCnt
, filePath
)
os
.remove
(filePath
)
except Exception
as e
:
print(e
)
delWithCmd
(filePath
)
for name
in dirs
:
try:
os
.rmdir
(os
.path
.join
(root
, name
))
dirsCnt
+= 1
except Exception
as e
:
print(e
)
os
.rmdir
(dirPath
)
def delDir(dirPath
):
global dirsCnt
shutil
.rmtree
(dirPath
)
dirsCnt
+= 1
print('dir deleted', dirsCnt
, dirPath
)
def delFile(filePath
):
global filesCnt
os
.remove
(filePath
)
filesCnt
+= 1
print('file deleted', filesCnt
, filePath
)
def delete(path
):
try:
if os
.path
.isfile
(path
):
delFile
(path
)
elif os
.path
.isdir
(path
):
deleteDir
(path
)
except Exception
as e
:
print(e
)
for proj
in os
.listdir
():
if not os
.path
.isdir
(proj
):
continue
os
.chdir
(proj
)
print(os
.getcwd
())
for p
in os
.listdir
():
if os
.path
.isdir
(p
) and p
in dirs
:
delete
(p
)
elif os
.path
.isfile
(p
) and os
.path
.splitext
(p
)[1] in files
:
delete
(p
)
libPath
= 'Library'
if os
.path
.exists
(libPath
) and os
.path
.isdir
(libPath
):
os
.chdir
(libPath
)
for p
in os
.listdir
():
if p
== 'LastSceneManagerSetup.txt':
continue
delete
(p
)
os
.chdir
('..')
os
.chdir
('..')