本帖最后由 8wekyb3d8bbwe 于 2024-4-3 23:48 编辑
本人自从注册账号以来第一次发帖,本帖仅为发帖试验,如有错误、重复、不明之处望请批评指正,侵删。
本人目前正在参加毕业实习,其中有个项目是给A文件夹内图片打上json标签,标签文件(与A文件夹内对应图片文件名相同,只不过后缀为.json)存放在B文件夹。其中A文件夹有些图片无法打标签,需要删掉,但在打标签过程中一个个删图片比较麻烦,于是我搜罗并稍作改进了个py脚本来实现批量删掉A文件夹内与B文件夹内标签文件文件名不同的图片。
可以发现A文件夹中有很多与B文件夹文件名不同的文件,故使用py脚本删除之。
[Python] 纯文本查看 复制代码 # 筛选并删除两个文件夹中不同文件名的文件
# 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)[0])
#print(file_list1)
# In[]
list2 = os.listdir(filePath2)
file_list2 = [] #2中的文件名列表 不带后缀
for i in list2:
file_list2.append(os.path.splitext(i)[0])
#print(file_list2)
# In[]
#找出没有标注的图片名称列表
b = [y for y in file_list2 if y not in file_list1]
#把这些列表加上扩展名 然后在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。
[Python] 纯文本查看 复制代码 pip install send2trash
然后在代码开头插入“from send2trash import send2trash”,把最后一行改为“send2trash(os.path.join(filePath2,i+'.png'))”即可实现不彻底删除而是移动到回收站。
改动后的代码如下:
[Python] 纯文本查看 复制代码 # 筛选并删除两个文件夹中不同文件名的文件
# 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)[0])
#print(file_list1)
# In[]
list2 = os.listdir(filePath2)
file_list2 = [] #2中的文件名列表 不带后缀
for i in list2:
file_list2.append(os.path.splitext(i)[0])
#print(file_list2)
# In[]
#找出没有标注的图片名称列表
b = [y for y in file_list2 if y not in file_list1]
#把这些列表加上扩展名 然后在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 |