Python批量删除文件到回收站教程
用Python把文件删除到回收站(而不是直接永久删除),支持批量操作和清空回收站,误删可恢复,比os.remove安全一百倍。
场景痛点
用Python批量清理文件,os.remove 一删就没,回收站里都找不到,手滑删错一个重要文件能冷汗直流。要是能像手动按Delete键一样,先丢进回收站,发现删错了还能还原,那就安全多了。用 send2trash 这个库,跨平台调用系统回收站,批量删除的文件全部可恢复,清空回收站也一行代码搞定。
用到的库
pip install send2trash openpyxl
删除到回收站用 send2trash,日志导出用 openpyxl。
完整代码
import os
from pathlib import Path
from send2trash import send2trash
from openpyxl import Workbook
def delete_to_recycle_bin(paths: list):
"""
批量把文件/文件夹移到回收站。
paths: 要删除的文件或文件夹路径列表
"""
success = []
failed = []
for p_str in paths:
p = Path(p_str)
if not p.exists():
failed.append((p_str, "路径不存在"))
continue
try:
send2trash(str(p))
success.append(str(p))
print(f"已移入回收站:{p}")
except OSError as e:
failed.append((str(p), str(e)))
print(f"删除失败:{p} -> {e}")
return success, failed
def clean_temp_files(root_dir: str, exts: list = None):
"""
扫描目录,把临时文件/缓存文件移入回收站。
exts: 要清理的后缀,默认常见临时文件后缀
"""
root = Path(root_dir)
if exts is None:
exts = {".tmp", ".bak", ".old", ".log", ".cache"}
candidates = []
for dirpath, _, filenames in os.walk(root):
for name in filenames:
p = Path(dirpath) / name
if p.suffix.lower() in exts:
candidates.append(str(p))
return candidates
def empty_recycle_bin():
"""清空回收站(不可逆,谨慎调用)。"""
try:
send2trash.empty_trash()
print("回收站已清空")
except Exception as e:
print(f"清空回收站失败:{e}")
def export_log(success: list, failed: list, out_path: str):
wb = Workbook()
ws = wb.active
ws.title = "删除日志"
ws.append(["状态", "路径", "备注"])
for p in success:
ws.append(["成功", p, "已移入回收站"])
for p, err in failed:
ws.append(["失败", p, err])
ws.column_dimensions['A'].width = 10
ws.column_dimensions['B'].width = 80
ws.column_dimensions['C'].width = 30
wb.save(out_path)
if __name__ == "__main__":
# 第一步:扫描临时文件
ROOT = r"D:\工作资料"
files_to_delete = clean_temp_files(ROOT)
print(f"扫描到 {len(files_to_delete)} 个临时文件\n")
# 第二步:确认后移入回收站(默认先打印不执行)
for f in files_to_delete:
print(" ", f)
# 确认无误后取消下一行注释执行
# success, failed = delete_to_recycle_bin(files_to_delete)
# export_log(success, failed, r"D:\工作资料\删除日志.xlsx")
# 清空回收站(单独确认后再用)
# empty_recycle_bin()
代码讲解
send2trash 是跨平台的回收站操作库,Windows上调用系统API把文件送进回收站,macOS上送进废纸篓,Linux上也有对应实现。和 os.remove 的本质区别:文件没被真正删掉,只是移到了回收站目录,随时可以还原。clean_temp_files 预设了常见临时后缀(.tmp、.bak、.log 等),扫出来先打印不执行,人工确认后再放开删除那行。empty_trash() 调用系统API清空回收站,不可逆,脚本里默认注释掉。日志记录哪些删了哪些失败,方便回溯。
运行结果
第一次运行只打印扫描到的临时文件清单,人工确认。放开 delete_to_recycle_bin 那行注释再跑,文件全部进入回收站,同时生成删除日志Excel。需要彻底清理时,单独放开 empty_recycle_bin()。
注意事项
send2trash是第三方库,必须pip install send2trash,标准库没有。- 回收站里的文件还占磁盘空间,确认不需要了再清空回收站。
- 网络驱动器(共享文件夹、网盘同步目录)上的文件不一定支持移入回收站,会报错。
- 删除文件夹时
send2trash会把整个文件夹连同内容一起移进回收站,和手动Delete一样。 - 永远不要在没看清单的情况下直接跑删除逻辑,先打印确认。

更新时间:2026-09-14 21:21:36