Python筛选并删除两个文件夹中不同文件名的文件
本帖最后由 8wekyb3d8bbwe 于 2024-4-3 23:48 编辑本人自从注册账号以来第一次发帖,本帖仅为发帖试验,如有错误、重复、不明之处望请批评指正,侵删。
本人目前正在参加毕业实习,其中有个项目是给A文件夹内图片打上json标签,标签文件(与A文件夹内对应图片文件名相同,只不过后缀为.json)存放在B文件夹。其中A文件夹有些图片无法打标签,需要删掉,但在打标签过程中一个个删图片比较麻烦,于是我搜罗并稍作改进了个py脚本来实现批量删掉A文件夹内与B文件夹内标签文件文件名不同的图片。
可以发现A文件夹中有很多与B文件夹文件名不同的文件,故使用py脚本删除之。
# 筛选并删除两个文件夹中不同文件名的文件
#In[]
import os
filePath1 = r"C:\123"#A的文件夹,及要比对的文件夹
filePath2 = r"C:\456"#B文件夹,即要处理的文件夹
list1 = os.listdir(filePath1)
file_list1 = [] #1中的文件名列表 不带后缀
for i in list1:
file_list1.append(os.path.splitext(i))
#print(file_list1)
#In[]
list2 = os.listdir(filePath2)
file_list2 = [] #2中的文件名列表 不带后缀
for i in list2:
file_list2.append(os.path.splitext(i))
#print(file_list2)
#In[]
#找出没有标注的图片名称列表
b =
#把这些列表加上扩展名 然后在filePath2将其删除
for i in b:
for dirpath, dirname, filename in os.walk(filePath2):
if i+'.png' in filename:
print(os.path.join(filePath2,i+'.png'))
os.remove(os.path.join(filePath2,i+'.png'))
此代码要修改的就是“filePath”里的“做比对的文件夹”和“要处理的文件夹”的文件夹相对路径(注意不是绝对路径),和倒数第一二三行“i+'.png'”里的“.png”扩展名了,把它修改为你要删除的文件类型的扩展名。
执行后,即可删除两个文件夹中不同文件名的文件。
特别注意的是,Python OS库里的os.remove函数不能将文件移动到回收站,而是直接彻底删除它!Python标准库中并没有直接将文件移动到回收站的函数。所以我们需要安装第三方库send2trash。
pip install send2trash
然后在代码开头插入“from send2trash import send2trash”,把最后一行改为“send2trash(os.path.join(filePath2,i+'.png'))”即可实现不彻底删除而是移动到回收站。
改动后的代码如下:
# 筛选并删除两个文件夹中不同文件名的文件
#In[]
import os
from send2trash import send2trash
filePath1 = r"C:\123"#A的文件夹,及要比对的文件夹
filePath2 = r"C:\456"#B文件夹,即要处理的文件夹
list1 = os.listdir(filePath1)
file_list1 = [] #1中的文件名列表 不带后缀
for i in list1:
file_list1.append(os.path.splitext(i))
#print(file_list1)
#In[]
list2 = os.listdir(filePath2)
file_list2 = [] #2中的文件名列表 不带后缀
for i in list2:
file_list2.append(os.path.splitext(i))
#print(file_list2)
#In[]
#找出没有标注的图片名称列表
b =
#把这些列表加上扩展名 然后在filePath2将其删除
for i in b:
for dirpath, dirname, filename in os.walk(filePath2):
if i+'.png' in filename:
print(os.path.join(filePath2,i+'.png'))
send2trash(os.path.join(filePath2,i+'.png'))
以上为本人毕业实习时总结的经验之一,就当发帖试验了。
来源:https://blog.csdn.net/qq_29487479/article/details/134849839 统一回复一下,这个帖子要表明的意思是,把两个文件夹下文件名不同的文件删了,留下的是文件名相同但扩展名不同的文件,不是两个相同的文件!实际的用途在于处理文件标签等工作:
举个例子,开发一款养鸡场智能巡检机器人,需要训练鸡只识别模型,相机拍了几千张图片,后续需要人工使用labelme工具把这些图片一一标上鸡只的位置(给鸡只打标签),即用矩形框在原图片文件框出鸡只,框完后会在另一个文件夹下生成与图片文件文件名相同的标签文件(.json格式),但有的图片不需要框,于是就产生了很多废弃图片,如果在打标签过程中一个个删图片太麻烦,故用此段代码可以一键批量删除。 思路可借鉴。。 感谢分享,整理大量照片或文件,同时还有备注的时候用得上。 52soft 发表于 2024-4-4 07:46
把不同的文件给删了,留下两个相同的文件?
看第九楼我回复的 AutumnFoam 发表于 2024-4-4 06:46
有啥用处呢
看第九楼我回复的 可以可以,学习了 AutumnFoam 发表于 2024-4-4 06:46
有啥用处呢
脚本里的功能拿来引申而不是直接套用,或许用来作为完全同步这样的扩展吧。 AutumnFoam 发表于 2024-4-4 06:46
有啥用处呢
学习为主{:1_926:} 把不同的文件给删了,留下两个相同的文件?
页:
[1]
2