S系列·删除文件夹的几种姿势

  • 目的
  • 删除姿势
  • 总结

S又称水,亦可读作Small,在日常工作学习过程中,偶尔会发现之前没有看见的、小的、有趣的操作,或许这些操作对于当下的问题解决并无意义,仍然想记录下来,或许能以单独写成一篇完整的文章,则作为流水账似的记下。

系列文章说明:

S系列·<<文章名称>>

平台:

  • windows 10.0

  • python 3.8

  • pywin32 227 (或者安装pypiwin32)

  • send2trash 1.5.0

目的

将一个包含数据文件的目录删除。

删除姿势

以下操作均在windows系统中操作。

  • 姿势一

直接在电脑上右击该文件夹,选择删除,或者使用Delete按键删除文件,这种方法删除文件,会将文件转移至回收站,如果需要恢复,点击还原即可。

  • 姿势二

python中使用使用os模块:

import osdelete_dir = r'测试文件夹'
for r, d, f in os.walk(delete_dir, topdown=False):for files in f:os.remove(os.path.join(r, files)) # 删除文件os.removedirs(r)  # 删除文件夹,必须为空

使用os.walk遍历待删除文件的内容,默认topdown=True,先输出最外层的再输出内层,此时会先将非空的文件夹输出,而是用os.removedirs删除非空文件夹会尝试报错,将topdown=False,先将内层文件逐个输出并删除,最后再删除上层的文件夹,直至全部删除。

  • 姿势三

pathlib模块:

from pathlib import Pathdelete_dir = Path(r'测试文件夹')
# 删除所有文件
[i.unlink() for i in delete_dir.rglob('*') if i.is_file()]
# 删除包含的所有空文件夹
[i.rmdir() for i in delete_dir.rglob('*') if i.is_dir()]
# 删除当前文件夹
delete_dir.rmdir()

os类似,将文件与文件夹分开删除,两次递归分别判断是否为文件或者目录,并按照对应删除方式删除,最后删除当前文件夹。

  • 姿势四

shutil模块

from shutil import rmtreedelete_dir = r'测试文件夹'
rmtree(delete_dir)

rmtree递归返回该目录下所有文件及文件夹,并将其删除,原理同姿势二,以下为rmtree核心代码部分:

rmtree首先判断删除方式是否为安全删除,以安全删除方式为例,对递归结果进行判断,如果为文件夹,判断内层是否还有文件,如果还有进行递归,再对递归结果做删除操作,如果为文件,直接进行删除,此种方式相比姿势二有了更多对文件状态的判断。

  • send2trash+shell

上述几种python方法删除文件会直接删除,不会经过回收站,如果想类似于姿势一的操作,可安装send2trash模块,将文件转移至回收站。

pip install send2trash

pip install pywin32 (或者 pip install pypiwin32)

import send2trashdelete_dir = r'测试文件夹'
send2trash.send2trash(delete_dir)

win32compywin32包中的一个模块,调用shell方法对回收站做处理。

from win32com.shell import shell, shellcondef recyclebin_empty(confirm=True, show_progress=True, sound=True):flags = 0if not confirm:  # 提示框flags |= shellcon.SHERB_NOCONFIRMATIONif not show_progress:  # 删除进度flags |= shellcon.SHERB_NOPROGRESSUIif not sound:  # 完成提示音flags |= shellcon.SHERB_NOSOUNDshell.SHEmptyRecycleBin(None, None, flags)  recyclebin_empty(False, False, False)

定义一个函数,设置默认会显示清空回收站提示框,显示进度及删除完提示音。两个函数相结合可以实现姿势一的操作过程。

总结

本文通过几种姿势,对需要删除的文件进行删除操作,纯分享个人感悟,删除文件基本是有手就行,之前使用电脑偶然抽风,直接使用shutil.rmtree进行删除偶有卡顿,原以为这种删除方式很慢,遂上网搜索了一番,而后用pathlib模块却能够快速删除,正当我想分享此事时,我重启电脑再次运行,发现shutil.rmtree能较快删除,经几次测试,shutil.rmtree相比pathlib删除速度较快,为何那时删除时间较长原因未知。

此山中烟雨,独留文人骚客。


2022.6.8留

S系列·删除文件夹的几种姿势相关推荐

  1. Mac终端删除文件夹

    Mac终端删除文件夹有两种情况:空文件夹&&非空文件夹 1.「空文件夹」:$ rmdir folderName 注:删除多个空文件夹的话只需要把文件夹之间用空格隔开 2.「非空文件夹」 ...

  2. java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力. 为了方便大家理解,我特意制作了本文对应的视频:总结删除文件 ...

  3. java 自动删除文件夹权限_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇...

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力.为了方便大家理解,我特意制作了本文对应的视频:总结删除文件或 ...

  4. python删除空文件和文件夹_python 两种方法删除空文件夹

    第一种方法: import os def delete_gap_dir(dir): if os.path.isdir(dir): for d in os.listdir(dir): #print(&q ...

  5. 【转载】常用DOS命令(包括创建删除文件夹/文件)

    https://www.cnblogs.com/chjb/articles/9393627.html 1.创建文件夹 我们可以使用 md 或mkdir 命令来创建,其中md和mkdir都是建立新目录m ...

  6. dos 删除文件夹 rd

    windows普通方法删除不了文件.文件夹?那么试试dos命令吧. rd的另外一个写法是rmdir,源自ReMakeDirectory.使用的方法也很简单:rd 文件夹名 即可,例如:rd test. ...

  7. C++ 创建文件夹的四种方式

    在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥.因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式: ...

  8. linux 下删除文件夹(文件夹不为空时)

    方法一: rmdir folderName  // 说明:这指适合在folder为空的时候 方法二: rm -rf folderName  //推荐使用,说明: -r  向下递归,不管多少级目录,一并 ...

  9. 删除文件夹下所有的文件_VB删除文件和文件夹的方法

    在VB编程中,我们如何删除一个指定的文件,或者文件夹呢? 本文,介绍两种方法,详细的介绍如何实现删除文件和文件夹,并对两种方法的区别做一个说明. 一.删除文件的方法 方法1: 使用kill方法删除文件 ...

最新文章

  1. mongodb 查询 mysql_MongoDB 基本查询使用
  2. java adt mac_Mac下搭建Eclipse Android开发环境
  3. Linux 最常用命令:简单易学,但能解决 95% 以上的问题
  4. python声明_【瞎折腾-03】在Python里面写类型“声明”
  5. 小括号教学设计导入_2020年小学教师资格证复习资料之小学课堂教学导入-教师吧...
  6. Fiddler (一) 教程(Web调试工具)
  7. pandas中DataFrame对象to_csv()方法中的encoding参数
  8. 【YII】常用代码积累
  9. 关于getX()getY()就可以获取到位置,找不到方法问题
  10. 有道词典词库_最好的免费词典和同义词库程序和网站
  11. dnf mysql数据库密码,MYSQL8在CentOS8环境中的安装过程(DNF/YUM)
  12. 太平洋车险条款 太平洋保险 条款 中国保险机动车交通事故责任强制保险条款 中国保险行业协会机动车综合商业保险示范条款 中国太平洋财产保险股份有限公司神行车保机动车损失保险(IACJQL0001)条款
  13. 咻咻验证码,见证百合网发展壮大!
  14. python面试题(面试重点)
  15. JavaScript——ES8新特性
  16. 个人支付宝支付系统 ---- 获取账单信息
  17. 魔兽名字前不显示服务器,服务器公布,角色名定制《魔兽世界》怀旧服未上先爆...
  18. Redis的数据结构(全)
  19. 根据年份提取dblp内容
  20. Java物流项目第十天 TMS司机端、快递员端开发

热门文章

  1. Kali Linux更新源和软件教程
  2. python从收货信息,寄件信息等字符串中,获取姓名
  3. Spark MLlib学习笔记:构建一个机器学习工作流
  4. 物联网感知技术、传输技术、支撑技术和应用技术的介绍
  5. java开发工作好找吗
  6. 华为nova3i能用鸿蒙吗,华为nova3i怎么打开nfc功能? 华为nova3i有nfc功能吗
  7. 获得电脑特殊文件夹的办法,如:\AppData\Local\Temp
  8. 想象未来人工智能的发展,人工智能构建未来世界
  9. Revit2022版插件 新版本2.0 | 史诗级的更新
  10. 网络扫描与网络侦察一