python删除文件夹里的指定文件_如何使用Python选择性地删除文件夹中的文件?

本文探讨了如何使用Python编程语言,通过os模块分别实现删除文件夹中的所有文件夹、仅删除空文件夹,并提供了两种方法:一是利用文件后缀名和os.chdir功能,二是利用os.walk遍历文件结构。适合处理文件夹层级结构的清理任务。
摘要由CSDN通过智能技术生成

问题1

问题描述:在一个文件夹中,有着普通文件以及文件夹,那么我们如何做到删除全部文件夹而不删除文件呢?

如下图所示,我们想要删除test文件夹中的所有文件夹,而保留其他文件:

Version 1

看到这个问题的第一刻,我想到的是文件夹没有后缀名,其他文件有后缀名,而拥有后缀名则意味着文件名称里面会有.的存在,我们就可以利用这个差别,来区分两者,进而实现问题描述中的功能。于是我就写出了以下Python代码:import os

os.chdir('H:\\学习代码\\test') # 改变路径到想要进行操作的文件夹

file_list = os.listdir()

for file in file_list:

# 通过split方法,文件夹名称的长度是1,也就是我们要删除的对象

if len(file.split('.')) == 1:

print('已删除:' + file)

os.rmdir(file)

print('Finished.')

运行结果:

我们可以看到,test文件夹中的文件已经全部删除。

Version 2.0

但是,后来仔细一想,上面这种方法却存在一个非常大的问题,如果普通文件是没有后缀名,也就是文件名称中不存在.,这可怎么办?

接着,我又发现了文件夹和普通文件的另外一个区别,也就是文件夹是可以使用os.chdir("file_name")这个命令的,而普通文件则显然不行,会出现异常。所以,就写下了以下代码:import os

os.chdir('H:\\学习代码\\test')

file_list = os.listdir()

for file in file_list:

try:

os.chdir(file) # 如果能进入当前文件,说明该文件是文件夹

os.chdir('..') # 返回到上一层路径

os.rmdir(file) # 删除文件夹

print('已删除:' + file)

except NotADirectoryError:

print('非文件夹:' + file)

print('Finished')

运行结果:

可以看到,文件夹已经删除,而没有后缀名的普通文件依然存在。

Version 2.1

使用os.walk()函数实现同样功能的另外一种写法:import os

for roots, dirs, files in os.walk('H:\\学习代码\\test'):

for dir in dirs:

os.chdir('H:\\学习代码\\test')

os.rmdir(dir)

print('Finished.')

问题2

问题描述:我们如何做到删除一个文件夹中的空白文件夹,而不删除其他文件呢?

可以看出,问题2是问题1的进阶版本,只需要在问题1的代码基础上,增加一个判断文件夹是否空白的语句即可。import os

os.chdir('H:\\学习代码\\test')

file_list = os.listdir()

for file in file_list:

try:

os.chdir('H:\\学习代码\\test\\' + file) # 如果能进入当前文件,说明该文件是文件

if len(os.listdir()) == 0:

os.chdir('..') # 返回到上一层路径

os.rmdir(file) # 删除文件夹

print('已删除:' + file)

os.chdir('..')

except NotADirectoryError:

print('非文件夹:' + file)

print('Finished')

运行结果:

使用os.walk()函数实现同样功能的另外一种写法:for roots, dirs, files in os.walk('H:\\学习代码\\test'):

for dir in dirs:

os.chdir('H:\\学习代码\\test\\' + dir)

if len(os.listdir()) == 0:

os.chdir('..') # 返回到上一层路径

os.rmdir(dir)

print('Finished.')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值