看代码段1 --这个代码段只适合删除标注文件为空白的情况下,来删除对应文件。大部分情况下标注文件不可能是空白的,只是没有Object而已,所以需要解析xml文件,从而判断图像中是否具有目标,这部分将放在代码段二中给出。
import os#python当中一个常用的系统的库
image_dir = "data/images"#图片的路径。
label_dir = "data/labels"#标注信息的路径
labelnames = os.listdir(label_dir)#创建一个列表用于接受标注路径上的标注文件的名字,并且以列表形式进行呈现
for labelname in labelnames:#在标注文件的列表上进行遍历
label = os.path.join(label_dir,labelname)#将标注文件的相对路径给出来
# print(label)
labelread = open(label,'r')#读取标注信息文件
contens = labelread.readlines()#一次性全读出
if contens:#如果标注信息里面有类容
print("true"+label)
else:#否则
print("none"+label)
fropath = (labelname.split(".")[0])#将标注文件以.分割一次,并且取出下标为O的部分
path = fropath+".png"#找到空标注文件的图片名称
image_path = os.path.join(image_dir,path)#找到空标注文件的图像路径
os.remove(image_path)#移除图片
labelread.close()#将读的文件关闭,这里必须关闭
os.remove(label)#移除空标注文件
代码段2-解析xml文件并且判断图像中是否含有目标
import os#python当中一个常用的系统的库
import xml.etree.ElementTree as ET
image_dir = "data/images"#图片的路径。
label_dir = "data/labels" #标注信息的路径
labelnames = os.listdir(label_dir)#创建一个列表用于接受标注路径上的标注文件的名字,并且以列表形式进行呈现
for labelname in labelnames:#在标注文件的列表上进行遍历
label = os.path.join(label_dir, labelname) # 将标注文件的相对路径给出来
tree = ET.ElementTree(file=label) # 获的xml 文件并且其抽象成tree对象
count = 0 #定义变量 count 用于 观察是文件中是否存在 object 元素
for elem in tree.iter(tag='object'):#对xml 中的元素进行遍历
count = count + 1 #文件中有,就+1
if 0 == count:#判断count 是否为0 为0的话就需要删除对应的xml文件和图片
fropath = (labelname.split(".")[0])
path = fropath + ".png"
image_path = os.path.join(image_dir, path)
os.remove(image_path)
os.remove(label)
print(labelname+'已经删除')
print(path+'已经删除')
代码段三—常用的用于分割的方法
s= 'www.dod.com.cn'
# 默认分隔符
print(s.split())
# . 分割
print(s.split('.'))
# 分割一次 2次
print(s.split('.',1))
print(s.split('.',2))
# 取出被 . 分割的下标为1的字符串
print(s.split('.',2)[1])
# 分割最多次实际与不加参数一样(默认分割富一样)
print(s.split('.',-1))
#分割三次并将分割的字符串保存到三个文件内
s1,s2,s3= s.split('.',2)
print(s1)
print(s3)
print(s2)