解决Python 删除只读文件/文件夹报错:[WinError 5] 拒绝访问。
程序员文章站
2023-12-12 17:19:04
文章目录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\Ed...
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('..')
本文地址:https://blog.csdn.net/COCO56/article/details/107061932