Python:批量刪除不需要的標籤類以及空檔案
阿新 • • 發佈:2018-11-12
#!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import xml.etree.ElementTree as ET origin_ann_dir = 'Annos/'# 設定原始標籤路徑為 Annos new_ann_dir = 'Annotations/'# 設定新標籤路徑 Annotations for dirpaths, dirnames, filenames in os.walk(origin_ann_dir):# os.walk遊走遍歷目錄名 for filename in filenames: print(filename) if os.path.isfile(r'%s%s' %(origin_ann_dir, filename)):#獲取原始xml檔案絕對路徑,isfile()檢測是否為檔案 isdir檢測是否為目錄 origin_ann_path = os.path.join(r'%s%s' %(origin_ann_dir, filename))#如果是,獲取絕對路徑(重複程式碼) new_ann_path = os.path.join(r'%s%s' %(new_ann_dir, filename))# tree = ET.parse(origin_ann_path)#ET是一個xml檔案解析庫,ET.parse()開啟xml檔案。parse--"解析" root = tree.getroot()#獲取根節點 for object in root.findall('object'):#找到根節點下所有“object”節點 name = str(object.find('name').text)#找到object節點下name子節點的值(字串),判斷:如果不是列出的,(這裡可以用in對保留列表成員進行審查),則移除該object節點及其所有子節點。 if not (name in ["shim losing","invisible pin losing"]): root.remove(object) flag = 0#清楚非保留完成-標誌位0 tree.write(new_ann_path)#tree為檔案,write寫入新的檔案中。 for object in root.findall('object'):#找到根節點下所有子節點 name = str(object.find('name').text)#找到子節點中name變數,判斷:如果每一個都是要保留的,則標誌位變1,這是一個審查。 if (name in ["shim losing","invisible pin losing"]): flag = 1 if (flag == 0): os.remove(new_ann_path)#所有不滿足審查:有多餘object,則用os.remove(filepath)刪除指定檔案。 #注意:改兩個地方,分別兩個有註釋的地方,一個if,一個if not
直接複製,修改地址後使用。修改兩個位置,如備註。