xml terminator, 讀取根目錄下所有xml,按照標(biāo)簽類別分別放到各自的文件夾里

假如 xml文件都藏在這些文件夾里面


image.png

文件夾里面還有子文件夾趴梢,多重子文件夾套娃


image.png

要注意里面的xml文件對應(yīng)著同名的jpg文件漠畜!

處理后的結(jié)果,所有xml按照標(biāo)簽分好類丟進(jìn)對應(yīng)的文件夾里面


image.png

按照 annotation/imgs/labels 創(chuàng)建了文件夾垢油,對應(yīng)的文件都在里面


image.png
import os
import xml.etree.ElementTree as ET
from shutil import copyfile
import pathlib as  pathlib
from collections import defaultdict

def parse_obj(filename):
    tree = ET.parse(filename)
    objects = []
    for obj in tree.findall('object'):      #獲取所有object,定位到每一個object里面
        obj_struct = {}
        obj_struct['name'] = obj.find('name').text   #獲取被name夾在中間的label名稱圆丹,具體打開xml文件看
        objects.append(obj_struct)
    return objects


def getallfiles(path):
    allfile = []
    file_xml = []
    for dirpath, dirnames, filenames in os.walk(path):
        for dir in dirnames:
            allfile.append(os.path.join(dirpath, dir))
        for name in filenames:
            allfile.append(os.path.join(dirpath, name))
    for file in allfile:
        if file.endswith('.xm',-4,-1):
            file_xml.append(file)
    return file_xml


if __name__ == '__main__':
    # filenamess = os.listdir('E:\code_yyq\get_data')
    filenames = getallfiles(r'D:\Yuqian_Yang\project_yolov4\yolo\data\smokephone\imgs')
    aim_root = 'D:\Yuqian_Yang\project_yolov4\yolo\data\smoke'    # 轉(zhuǎn)移的文件夾路徑滩愁;注意下劃線
    classnames = []
    recs={}
    copy_key = defaultdict(list)
    for i, name in enumerate(filenames):
        recs[name] = parse_obj(name)
    if not os.path.exists(aim_root):
        os.makedirs(aim_root)
    for name in filenames:
        num_key = 0
        for object in recs[name]:
            if object['name'] not in classnames:
                copy_key['%s' %(object['name'])].append(name)
                if not os.path.exists(aim_root + "/%s" % object['name']):
                    os.makedirs(aim_root + "/%s" % object['name'])
                    os.makedirs(aim_root + "/%s" % object['name'] + "/anotation")
                    os.makedirs(aim_root + "/%s" % object['name'] + "/imgs")
                    os.makedirs(aim_root + "/%s" % object['name'] + "/labels")

    for name in copy_key:

        for i in range(0, len(copy_key['%s'%name])):

            file_jpg = "%s" % copy_key['%s'%name][i].replace("xml", "jpg").replace("\\", "/").replace("http://","/")
            file_JPG = "%s" % copy_key['%s' % name][i].replace("xml", "JPG").replace("\\", "/").replace("http://", "/")
            # print(file_jpg)
            file_xml = "%s" % copy_key['%s' % name][i]
            f_jpg = os.path.basename(file_jpg)
            f_JPG = os.path.basename(file_JPG)
            f_xml = os.path.basename(file_xml)
            if pathlib.Path(file_jpg).exists():
                try:
                    copyfile(file_jpg, aim_root + "/%s" % name + "/imgs" + "/%s" %f_jpg)
                    copyfile(file_xml, aim_root + "/%s" % name + "/anotation" + "/%s" %f_xml)
                except:
                    print("warning:", file_jpg)
            elif pathlib.Path(file_JPG).exists():
                try:
                    copyfile(file_jpg, aim_root + "/%s" % name + "/imgs" + "/%s" %f_JPG)
                    copyfile(file_xml, aim_root + "/%s" % name + "/anotation" + "/%s" %f_xml)
                except:
                    print("warning:", file_jpg)
            else:
                print("Error: no such jpg file:", file_jpg)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辫封,隨后出現(xiàn)的幾起案子硝枉,更是在濱河造成了極大的恐慌廉丽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻味,死亡現(xiàn)場離奇詭異正压,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)责球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門焦履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雏逾,你說我怎么就攤上這事嘉裤。” “怎么了栖博?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵屑宠,是天一觀的道長。 經(jīng)常有香客問我仇让,道長典奉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任丧叽,我火速辦了婚禮卫玖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蠢正。我一直安慰自己骇笔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布嚣崭。 她就那樣靜靜地躺著笨触,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雹舀。 梳的紋絲不亂的頭發(fā)上芦劣,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音说榆,去河邊找鬼虚吟。 笑死,一個胖子當(dāng)著我的面吹牛签财,可吹牛的內(nèi)容都是我干的串慰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼唱蒸,長吁一口氣:“原來是場噩夢啊……” “哼邦鲫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤庆捺,失蹤者是張志新(化名)和其女友劉穎古今,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滔以,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉腥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了你画。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抵碟。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撬即,靈堂內(nèi)的尸體忽然破棺而出立磁,到底是詐尸還是另有隱情,我是刑警寧澤剥槐,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布唱歧,位于F島的核電站,受9級特大地震影響粒竖,放射性物質(zhì)發(fā)生泄漏颅崩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一蕊苗、第九天 我趴在偏房一處隱蔽的房頂上張望沿后。 院中可真熱鬧,春花似錦朽砰、人聲如沸尖滚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漆弄。三九已至,卻和暖如春造锅,著一層夾襖步出監(jiān)牢的瞬間撼唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工哥蔚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倒谷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓糙箍,卻偏偏與公主長得像渤愁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子深夯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348