1. 程式人生 > >Python:批量刪除不需要的標籤類以及空檔案

Python:批量刪除不需要的標籤類以及空檔案

#!/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

直接複製,修改地址後使用。修改兩個位置,如備註。