20221219星期一:
方式一:shutil.rmtree(path),暴力删除,直接删除檔案夾,不管是否為空
方式二:os.remove(),os.rmdir(),保留最外層檔案夾
方式三:os.remove(dir_path),遞歸删除,保留各級檔案夾
"""
@Project : For_Python_Pro
@File : removeFileAndFolder.py
@Author : Administrator
@Time : 2022/12/19 12:07
@Product : PyCharm
"""
import os
import shutil
# 方式一:shutil.rmtree(path)
# 暴力删除
# 删除目錄,不管為空或者不為空
# 傳入檔案路徑報錯:
# [WinError 267] 目錄名稱無效。: 'E:\\資料 - 副本 (2)\\PythonTip.xlsx'
# 最終運作,finally
def remove_shutil(dir_path):
try:
shutil.rmtree(dir_path) # 必須是目錄路徑,不能是檔案路徑
except Exception as e:
print(e)
else:
print("删除成功!")
finally:
print("最終運作,finally")
remove_shutil("E:\資料 - 副本 (2)\PythonTip.xlsx")
# 方式二:os.remove(),os.rmdir()
# 删除檔案夾下的所有内容,保留這個檔案夾:
# 傳入不存在的檔案或者檔案夾,不會報錯:
# os.remove:
# 依次傳入不存在的目錄路徑,存在的目錄路徑,不存在的檔案路徑,報錯如下:
# FileNotFoundError: [WinError 2] 系統找不到指定的檔案。: 'E:\\資料 - 副本 (5)'
# PermissionError: [WinError 5] 拒絕通路。: 'E:\\資料 - 副本 (4)'
# FileNotFoundError: [WinError 2] 系統找不到指定的檔案。: 'E:\\資料 - 副本 (4)\\PythonTip11.xlsx'
# os.rmdir:隻能删除一個空目錄:傳入其他的則報錯
def remove_os01(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','檔案2']
# 第一步:删除檔案
for name in files:
os.remove(os.path.join(root, name)) # 删除檔案
# 第二步:删除空檔案夾
for name in dirs:
os.rmdir(os.path.join(root, name)) # 删除一個空目錄
remove_os01("E:\資料 - 副本 (5)")
# 方式三:os.remove(dir_path)
# 遞歸删除檔案,保留各級空檔案夾:
def remove_os02(dir_path):
if os.path.isfile(dir_path):
try:
os.remove(dir_path) # 這個可以删除單個檔案,不能删除檔案夾
except BaseException as e:
print(e)
elif os.path.isdir(dir_path):
file_lis = os.listdir(dir_path)
for file_name in file_lis:
# if file_name != 'wibot.log':
tf = os.path.join(dir_path, file_name)
remove_os02(tf)
print('ok')
remove_os02("E:\資料 - 副本 (4)")