python 将xml文件转换成csv文件

前言

这种应用好像比较冷门哈哈,整体需求是有xml文件,如下所示:


	标注前
	1080.jpg
	x\1080.jpg
	
		Unknown
	
	
		720
		480
		3
	
	0
	
		person
		Unspecified
		0
		0
		
			394
			91
			516
			311
		
	

获取这个文件中filename、xmin、ymin、xmax和ymax标签中的值,并将这些值成为表格的样式,如下所示:
|

转换代码

import os
import pandas as pd  # 存储为csv文件的库
import xml.dom.minidom  # 读取xml文件的库
import numpy as np

class xml2csv:
    def __init__(self, raw_data_dir):
        self.csv_date = pd.DataFrame(columns=['frame', 'xmin', 'ymin', 'xmax', 'ymax'])
        self.raw_data_dir = raw_data_dir
        self.arr_data = np.zeros((1, 5))

    def convert(self):
        xml_data = os.listdir(self.raw_data_dir)
        xml_data.sort()  # 我需要按顺序存储,所以进行排序

        for one_file in xml_data:
            # 读取xml文件
            dom = xml.dom.minidom.parse(os.path.join(self.raw_data_dir, one_file))
            element = dom.documentElement

            filename = element.getElementsByTagName('filename')[0]
            xmin = element.getElementsByTagName('xmin')[0]
            ymin = element.getElementsByTagName('ymin')[0]
            xmax = element.getElementsByTagName('xmax')[0]
            ymax = element.getElementsByTagName('ymax')[0]

            # 将文件中所需要的值添加到DataFrame中
            self.arr_data[0][0] = filename.childNodes[0].data.split('.')[0]
            self.arr_data[0][1] = xmin.childNodes[0].data
            self.arr_data[0][2] = ymin.childNodes[0].data
            self.arr_data[0][3] = xmax.childNodes[0].data
            self.arr_data[0][4] = ymax.childNodes[0].data
            # 追加方式填充上数据
            one_row_data = pd.DataFrame(self.arr_data, columns=['frame', 'xmin', 'ymin', 'xmax', 'ymax'])
            self.csv_date = self.csv_date.append(one_row_data, ignore_index=True)

    def save_date(self, save_dir):
        self.csv_date.to_csv(os.path.join(save_dir, 'annotation_data.csv'), index=False)  # index=False不显示行名


if __name__ == '__main__':
    # 读取源文件
    xc = xml2csv(r'../Annotations/')  # 写入xml文件的路径
    # 进行转化
    xc.convert()
    # 存储文件
    xc.save_date(r'.')  # 用于存储的路径

运行效果

源文件
python 将xml文件转换成csv文件_第1张图片
目标格式
python 将xml文件转换成csv文件_第2张图片

参考链接

Python读取XML文件内容

你可能感兴趣的:(python,xml,numpy)