如何在Python中删除文件?
Python删文件这事儿,刚入行那会儿我也被坑过几次,说起来简单,但你真想写得又安全又优雅,还得花点心思。
先说个最直给的写法:os.remove()。这行代码看着就像那种“祖传代码”里常见的暴力操作,路径传进去,文件就没了。是的,真就这么简单。
import os
os.remove("somefile.txt")
但说实话,这写法要是直接上线,搞不好哪天你就得背锅。比如路径错了?比如文件不存在?比如你权限不够?这些问题,一个都不管的代码,简直像裸奔一样危险。
所以,像我后来养成了个习惯,每次删文件,前面一定会先 check 一下:
import os
file_path = "somefile.txt"
if os.path.exists(file_path):
os.remove(file_path)
else:
print("😅 文件不存在,不用删了")
这就像做删除操作前,先问一下老板“你确定?”同样是删,责任就清晰多了。
哦对了,还有些人用 os.unlink(),别慌,这俩函数本质是一个东西,unlink() 是 Unix 风格的叫法,在 Python 里它俩是等价的,你选哪个都行,别纠结。
那有没有更“现代”的写法?有,pathlib。自从 Python 3.4 后,这模块就是我删文件的新欢,理由嘛...优雅,代码像诗。
from pathlib import Path
path = Path("somefile.txt")
if path.exists():
path.unlink()
你看这语义,简直像在跟文件说“你被释放了”。
不过还有个大坑,很多人删文件时没意识到的,那就是——目录也可能被传进来!你拿 os.remove() 或 Path.unlink() 去删目录?那就等着报 IsADirectoryError 吧。
要删目录,你得用 os.rmdir() 或者 shutil.rmtree(),这俩是干这个的专业选手,前者只能删空目录,后者是递归硬核清除,连骨灰都找不着的那种:
import shutil
shutil.rmtree("myfolder")
这玩意儿慎用,真是彻底、永久、无可挽回。
我见过最离谱的一次操作,是某位兄弟写了 shutil.rmtree("/"),结果公司测试机差点当场殉职 😱,那之后我们组直接搞了个钩子,强行禁止操作根路径。
再提个小技巧,删文件前做日志记录真的很有必要,哪天你被问“谁删的日志文件?”起码还能说:“不是我,是程序删的。” 😏
import logging
from pathlib import Path
logging.basicConfig(filename="delete.log", level=logging.INFO)
defsafe_delete(path_str):
path = Path(path_str)
if path.exists():
logging.info(f"Deleting: {path}")
path.unlink()
else:
logging.warning(f"Attempted to delete non-existent file: {path}")
safe_delete("important.log")
最后留个小尾巴,如果你做的是面向用户的桌面应用或者服务类应用,不建议让删文件动作太“直接”,要不然删了个配置文件,用户第二天就投诉“为啥启动不了”。不如搞成“软删除”,比如加个 .deleted 后缀或者移动到 .trash 文件夹里,哪怕出点事还有得救。
所以,Python删文件,说简单也简单,但说稳妥,还真得多想一步。不然哪天你自己删了自己写的日志文件,笑不出来了🤣
你们现在都怎么处理删文件的?是直接干,还是先问一嘴?
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,全部免费领取!