前言
最近在整理以前写的程序,想要保存起来,但发现VS工程里有一些不必要保存还非常占用空间的文件,例如.sdf
文件或ipch
文件夹,但写的程序太多,又不想一个一个手动整理,索性就写了个程序来实现它,正好也练习一下最近学的Python。
实现
程序大概就是遍历文件,如果是我们要删除的文件,则删除之。
相关函数
- os.remove(file_name):删除一个文件
>>> import os
>>> os.remove("text2.txt")
- os.removedirs(path):递归删除空文件夹
# 只有满足下列条件才会被删除:
# 1. test1目录中除了有一个test2目录外,再没有其它的目录和文件
# 2. test2目录中必须是一个空目录
>>> import os
>>> os.removedirs("test1\\test2")
- os.path.splitext(file_name):分离文件名与扩展名
>>> import os
>>> os.path.splitext("text2.txt")
('text2', '.txt')
- os.path.join(path,name):连接目录与文件名或目录
>>> import os
>>> os.path.join('C:\\', 'text2.txt')
'C:\\text2.txt'
- os.chmod(path, mode):改变文件或文件夹权限
>>> import os, stat
>>> os.chmod("C:\\text2.txt", stat.S_IWRITE)
- shutil.rmtree(path):递归删除文件夹
# 不能删除只读文件或文件夹,所以需要os.chmod来改变权限
>>> import shutil
>>> shutil.rmtree("G:\\test")
- os.walk(path):遍历文件夹
# parent为遍历文件或文件夹的父目录
# dirs为该父目录下的文件夹
# files为该父目录下的文件
import os
for parent, dirs, files in os.walk("G:\\")
for f in files:
print(os.path.join(parent, f))
for d in dirs:
print(os.path.join(parent, d))
遇到的问题
在实现中,也遇到了不少问题。这里记录下来:
-
一开始用
os.removedirs
来删除文件夹,但错误提示为OSError: [WinError 145] The directory is not empty
,后来上网查才搞明白os.removedirs
只能删除空文件夹,所以换成了shutil.rmtree
。 -
shutil.rmtree
不能删除只读文件夹,例如Debug
文件夹,后上网查询,通过os.chmod
可改变权限。
代码
import os
import os.path
import stat
import shutil
root = "G:\Workshop\Program"
for parent, dirs, files in os.walk(root):
for f in files:
split = os.path.splitext(f)
if split[-1] == ".sdf" or split[-1] == ".suo":
print("parent is: ", parent)
print("delete: ", f)
os.remove(os.path.join(parent, f))
for d in dirs:
if d == "ipch" or d == "Debug":
print("parent is: ", parent)
print("delete: ", d)
os.chmod(os.path.join(parent, d), stat.S_IWRITE)#修改权限为可写文件
shutil.rmtree(os.path.join(parent, d))
print("well done")