前言
刪除資料夾下的所有的檔案,以及子檔案下所有的檔案,把這個資料夾全部刪除。
shutil.rmtree() 刪除
先介紹一個最簡單的方法,shutil.rmtree()
import shutil
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
shutil.rmtree('D:\\test', ignore_errors=True)
刪除 D:\test 目錄下全部檔案,並且忽略錯誤
os模組遞迴刪除
可以透過os模組,自己寫個遞迴刪除
import os
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def delete_dir_file(dir_path):
"""
遞迴刪除資料夾下檔案和子資料夾裡的檔案,不會刪除空資料夾
:param dir_path: 資料夾路徑
:return:
"""
if not os.path.exists(dir_path):
return
# 判斷是不是一個檔案路徑,並且存在
if os.path.isfile(dir_path) and os.path.exists(dir_path):
os.remove(dir_path) # 刪除單個檔案
else:
file_list = os.listdir(dir_path)
for file_name in file_list:
delete_dir_file(os.path.join(dir_path, file_name))
# 遞迴刪除空資料夾
if os.path.exists(dir_path):
os.rmdir(dir_path)
if __name__ == '__main__':
delete_dir_file('./data')
上面程式碼刪除的時候,如果想保留我們資料夾以及子資料夾,僅僅只刪除檔案,可以去掉這句
# 遞迴刪除空資料夾
if os.path.exists(dir_path):
os.rmdir(dir_path)
還有另外一種實現方式
import os
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def delete_dir2(dir_path):
# os.walk會得到dir_path下各個後代資料夾和其中的檔案的三元組列表
for root, dirs, files in os.walk(dir_path, topdown=False):
print(root) # 資料夾絕對路徑
print(dirs) # root下一級資料夾名稱列表,如 ['資料夾1','資料夾2']
print(files) # root下檔名列表,如 ['檔案1.xx','檔案2.xx']
# 第一步:刪除檔案
for name in files:
os.remove(os.path.join(root, name)) # 刪除檔案
# 第二步:刪除空資料夾
for name in dirs:
os.rmdir(os.path.join(root, name)) # 刪除一個空目錄
# 加這段程式碼,最外層資料夾也一起刪除
if os.path.exists(dir_path):
os.rmdir(dir_path)
delete_dir2('data')
如果需要把最外層目錄一起刪除,可以加上這句
# 加這段程式碼,最外層資料夾也一起刪除
if os.path.exists(dir_path):
os.rmdir(dir_path)
使用 pathlib 模組實現
os模組現在很少用了,用 pathlib 模組替換os 模組相關程式碼
from pathlib import Path
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def delete_dir_file(dir_path):
"""
遞迴刪除資料夾下檔案和子資料夾裡的檔案,不會刪除空資料夾
:param dir_path: 資料夾路徑
:return:
"""
p = Path(dir_path)
if not p.exists():
return
# 判斷是不是一個檔案路徑,並且存在
if p.is_file() and p.exists():
p.unlink() # 刪除單個檔案
else:
for file_name in p.iterdir():
# 遞迴刪除檔案
delete_dir_file(file_name)
# 遞迴刪除空資料夾
if p.exists():
p.rmdir()
if __name__ == '__main__':
delete_dir_file('./data')