天天看點

Python檔案、檔案夾删除之os、shutil

作者:能級躍遷2022

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)")

           
Python檔案、檔案夾删除之os、shutil
Python檔案、檔案夾删除之os、shutil
Python檔案、檔案夾删除之os、shutil