一、三種刪除方法
python刪除文件和文件夾主要用到os模塊和shutil模塊,針對文件夾和文件的刪除,有幾種情況,直接上代碼:
文件刪除相關的所有操作,基本全部覆蓋
如果確實對你有幫助,右側打賞一分鼓勵一下吧,嘿咻嘿咻
import shutil import os from pathlib import Path # 第一種:刪除一個文件夾,無論里面是否有文件或文件夾 # (不支持文件,文件夾不存在會報錯) def del_files0(dir_path): shutil.rmtree(dir_path) # 第二種 遞歸刪除dir_path目標文件夾下所有文件,以及各級子文件夾下文件,保留各級空文件夾 # (支持文件,文件夾不存在不報錯) def del_files(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) del_files(tf) print('ok') # 第三種: 刪除dir_path目標文件夾下所有內容,保留dir_path文件夾 # (不支持文件,文件夾不存在會報錯) def del_files2(dir_path): # os.walk會得到dir_path下各個后代文件夾和其中的文件的三元組列表,順序自內而外排列, # 如 log下有111文件夾,111下有222文件夾:[('D:\\log\\111\\222', [], ['22.py']), ('D:\\log\\111', ['222'], ['11.py']), ('D:\\log', ['111'], ['00.py'])] 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)) # 刪除一個空目錄 if __name__ == '__main__': dir_path = Path('./log').absolute() del_files2(dir_path)
二、刪除失敗情況 PermissionError: [WinError 5] 拒絕訪問
刪除某些文件夾或者文件,比如git倉庫的時候,會報錯,顯示 PermissionError: [WinError 5] 拒絕訪問。
2.1 給python權限
這是因為沒有權限,可以參考>>解決辦法<<
2.2 刪除改為更名
我感覺給與權限還需要修改這修改那的很麻煩,直接放棄刪除操作,替換為更改文件夾名字操作:
import random,os dir_path = os.getcwd() # 當前目錄絕對路徑D:\git_helper print('當前目錄絕對路徑:', str(random.random())[-5:]) os.rename(src='../weebot_wxbot', dst=f'../weebot_wxbot{str(random.random())[-5:]}')