YOLO系列笔记(十一)——csv文件转换成xml文件

csv文件转换成xml文件

  • 前言
  • 意义
  • 代码
  • 解析
    • 导入模块
    • 转义特殊XML字符
    • 定义主函数
      • 功能解析
    • 执行函数
  • 结语

前言

在深入研究YOLO等图像处理神经网络之后,我深刻认识到数据是深度学习的基石。事实上,无论是何种类型的神经网络,它们都极度依赖于数据的质量和结构。网络的性能、效率以及最终的应用成效,均直接受到其训练和测试数据的影响。在我的数据搜集过程中,我注意到许多数据库主要以CSV文件格式存储。尽管CSV格式便于人们查看和阅读,但它并不适合神经网络的数据输入需求。因此,在本文中,我将分享一种从CSV文件转换为XML文件的方法,并对这一转换过程进行详细分析。

意义

XML文件经常被用作神经网络读取图像数据集的标注信息(Annotation),这主要得益于XML的结构化特性,它能够有效地存储和组织图像标注信息。对于神经网络和其他机器学习模型而言,结构化数据格式更易于解析和处理。

XML文件可以包含多层次的标记、属性和文本内容,这使得将图像的标注信息以层次化结构形式存储成为可能。在XML文件中,每一个标记通常代表图像中的一个特定对象或区域,而标记的属性可以详细描述对象的类别、位置、尺寸等关键信息。

神经网络模型通常需要大量的训练数据进行学习和提高识别能力,而这些数据不仅需要包括输入图像,还应包含相应的标注信息。作为一种高度结构化的数据格式,XML文件非常适合存储图像数据集中的标注结果。使用XML文件,神经网络模型可以轻松地读取和解析标注信息,有效地利用这些数据进行模型训练和学习,从而提高模型对新图像的识别和处理能力。

代码

import csv
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString

def escape_xml_chars(text):
    return (text.replace("&", "&")
                .replace("<", "&lt;")
                .replace(">", "&gt;")
                .replace("\"", "&quot;")
                .replace("'", "&apos;"))

def csv_to_xml(csv_file, xml_file):
    with open(csv_file, 'r') as f:
        reader = csv.reader(f)
        headers = next(reader)  # 读取第一行列标题
        
        root = Element('Root')
        
        for row in reader:
            item = SubElement(root, 'Item')
            for h, v in zip(headers, row):
                # h = "Col_" + h.strip()  # 确保列名是有效的XML标签,去除多余空格
                child = SubElement(item, h)
                child.text = escape_xml_chars(v.strip())  # 清洗数据,转义特殊字符

        xml_str = tostring(root, 'utf-8')
        parsed_xml = parseString(xml_str)
        pretty_xml = parsed_xml.toprettyxml(indent="  ")
        
        with open(xml_file, 'w') as fxml:
            fxml.write(pretty_xml)

csv_to_xml('input.csv', 'output.xml')

解析

这段代码主要功能是将一个CSV文件的内容转换为XML格式并保存为XML文件。下面我将详细解释这段代码的每个部分和步骤:

导入模块

import csv
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
  • csv: Python标准库,用于读取和写入CSV文件。
  • xml.etree.ElementTree: Python库,用于生成和处理XML数据。
  • xml.dom.minidom: Python的一个XML解析器,这里用来美化XML输出,使其更易于阅读。

转义特殊XML字符

def escape_xml_chars(text):
    return (text.replace("&", "&amp;")
                .replace("<", "&lt;")
                .replace(">", "&gt;")
                .replace("\"", "&quot;")
                .replace("'", "&apos;"))

这个函数用于转义可能破坏XML格式的特殊字符。它将特殊字符转换为它们在XML中的实体表示形式,确保XML文档的有效性。

定义主函数

def csv_to_xml(csv_file, xml_file):
    with open(csv_file, 'r') as f:
        reader = csv.reader(f)
        headers = next(reader)  # 读取第一行列标题
        
        root = Element('Root')
        
        for row in reader:
            item = SubElement(root, 'Item')
            for h, v in zip(headers, row):
                child = SubElement(item, h)
                child.text = escape_xml_chars(v.strip())  # 清洗数据,转义特殊字符

        xml_str = tostring(root, 'utf-8')
        parsed_xml = parseString(xml_str)
        pretty_xml = parsed_xml.toprettyxml(indent="  ")
        
        with open(xml_file, 'w') as fxml:
            fxml.write(pretty_xml)

功能解析

  • 打开CSV文件:使用open函数以只读模式打开CSV文件。‘r’代表“读文件”。
  • 创建CSV读取器:通过csv.reader处理打开的文件。
  • 读取列标题next(reader)获取CSV文件的第一行,通常包含列标题(这里注意列标题不能有任意列为空,不然后面对生成的xml字符串进行parse的时候会报错。列标题需注明每一列数据的类型)。
  • 创建XML根元素Element('Root')创建了一个名为Root的根元素。xml中所有其他的元素item都放在根元素下。
  • 遍历CSV数据行:循环遍历CSV文件的每一行数据。
  • 为每行数据创建XML元素
    • SubElement(root, 'Item')为每行数据创建一个名为Item的子元素。
    • 内部循环遍历每行的每个字段,将每个字段作为Item的子元素添加,并设置文本内容为该字段的值,字段值通过escape_xml_chars处理特殊字符。
  • 生成XML字符串tostring(root, 'utf-8')root及其所有子元素转换成字符串。
  • 美化XML输出:使用parseStringtoprettyxml格式化XML字符串,使其具有适当的缩进和行结构。
  • 保存到文件:将美化后的XML字符串写入指定的XML文件。

执行函数

csv_to_xml('input.csv', 'output.xml')
  • 这一行代码调用csv_to_xml函数,将指定的CSV文件转换成XML文件,并保存。

这个代码段的主要用途是将特定格式的数据(CSV)转换成另一种格式(XML),这在需要数据交换或特定数据处理应用中非常有用,如在需要将数据导入到XML支持的系统中时。

结语

将CSV格式的数据转换为XML不仅有助于改善数据输入过程,还可以优化和加速神经网络的训练和测试阶段。通过更加系统地组织和标注训练数据,我们能够构建更为精确和高效的神经网络模型,进而推动机器学习和人工智能技术在图像处理领域的应用发展。

将该代码结合之前的YOLO系列笔记(七)——xml文件转换成txt文件,就可以再次将xml文件转化为text文件,具体需要什么样的文件格式,按照需要使用该数据的神经网络的输入格式决定。

最后,看到这里如果觉得该笔记对您有用的话,可以点个小小的赞吗,或者点赞收藏关注一键三连ヾ(◍’౪`◍) ~ 谢谢!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/597320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot框架web开发实用功能-02

在些模块中汇总了一些web开发常用的配置和功能。 涉及的模块 springboot-common-config&#xff0c; 端口号&#xff1a;17000 Springboot框架web开发常用功能 Restful接口定义 查询参数 Data public class QueryParam {private String key;private String value; }Control…

MATLAB实现杜拉德公式和凯夫公式的计算固液混合料浆临界流速

MATLAB实现杜拉德公式和凯夫公式的计算固液混合料浆临界流速: 杜拉德公式是用来计算非均质固液混合料浆在输送管中的临界速度的公式&#xff0c;具体形式为&#xff1a; uL FL (2gD / (ρ0 - ρ1))^(1/2) 其中&#xff1a; uL&#xff1a;表示料浆的临界速度&#xff0c;…

Hbase 常用shell操作

目录 1、创建表 1.1、启动HBase Shell 1.2、创建表 1.3、查看表 1.4、删除表 2、插入数据 2.1、put命令 3、查看数据 3.1、get命令 3.2、查询数据中文显示 4、更新数据 4.1、使用put来更新数据 5、删除数据 5.1、delete命令 5.2、删除指定列的数据 5.3、delete…

Pycharm debug 运行报错 (RuntimeError: cannot release un-acquired lock)

问题描述&#xff1a; 最近再跑一个 flask应用&#xff0c;Pycharm 运行没问题&#xff0c;debug断点启动时报错 如下&#xff1a; 解决方案&#xff1a; 在环境变量中增加 GEVENT_SUPPORTTrue 启动成功&#xff01;

libcity笔记:添加新模型(以RNN.py为例)

创建的新模型应该继承AbstractModel或AbstractTrafficStateModel 交通状态预测任务——>继承 AbstractTrafficStateModel类轨迹位置预测任务——>继承AbstractModel类 1 AbstractTrafficStateModel 2 RNN 2.1 构造函数 2.2 predict 2.3 calculate_loss

博客系统项目测试报告

文章目录 一.报告概要二.测试环境三.手工测试用例四.编写测试用例五.自动化测试Selenium测试项目主要特点 一.报告概要 项目概要 本项目是一个全功能的个人博客系统&#xff0c;旨在提供一个用户友好、功能全面的平台&#xff0c;允许用户注册、登录、浏览博客、查看详细内容、…

Mac跑llama.cpp过程中遇到的问题

原repo 在华为手机上安装termux、下载库&#xff1a;顺利在电脑上安装Android NDK&#xff1a;先下载Android Studio&#xff0c;再在里面下载Android SDK 安装Android Studio时&#xff0c;SDK的某些组件总是下载不成功。后来关了梯子、改了hosts&#xff0c;重新安装就成功了…

Golang | Leetcode Golang题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; func setZeroes(matrix [][]int) {n, m : len(matrix), len(matrix[0])col0 : falsefor _, r : range matrix {if r[0] 0 {col0 true}for j : 1; j < m; j {if r[j] 0 {r[0] 0matrix[0][j] 0}}}for i : n - 1; i > 0; i-- {for …

Go实现树莓派控制舵机

公式说明 毫秒&#xff08;ms&#xff09;是时间的单位&#xff0c;赫兹&#xff08;Hz&#xff09;是频率的单位&#xff0c;而DutyMax通常是一个PWM&#xff08;脉冲宽度调制&#xff09;信号中表示最大占空比的值。以下是它们之间的关系和一些相关公式&#xff1a; 频率&…

【华为】路由策略小实验

【华为】软考中级-路由策略实验 实验需求拓扑配置AR1AR2需求1需求2 AR3 检验 实验需求 1、让 R3 可以学到R1的 192.168.10.0/24和192.168.20.0/24的 路由&#xff0c;不能学到192.168.30.0/24。 2、让 R1可以学到 R3 的 172.16.20.0/24和172.16.30.0/24的路由&#xff0c;不能…

opencv图像处理详细讲(二)

联通组件分析 联通组件定义&#xff1a;像素值相同&#xff0c;通过四邻域或者八邻域相互连通的像素块。 换句话说&#xff0c;就是使用四邻域或八邻域的连通性&#xff0c;遍历图像的像素&#xff0c;并确定像素值相同并且连通的像素块&#xff0c;将它们标记为一个联通组件 两…

虚拟机VM VirtualBox安装openEuler+UKUI的安装和卸载_2024

虚拟机VM VirtualBox安装openEuler ps. 建议先看最后的其他 下载openEuler openEuler官网下载 一般来说标准版就够用了 使用虚拟机VM VirtualBox安装openEuler 新建虚拟机 修改用户名密码&#xff0c;建议修改&#xff0c;虽然之后还可以通过命令行修改&#xff08;注意密…

pyecharts绘制世界动态轨迹图(v0.5.X与v1.X版本对比)

一、问题引入 pyecharts官网&#xff1a;https://pyecharts.org/#/zh-cn/intro 在使用Geo或者GeoLines绘制动态轨迹图时&#xff0c;如果所选地区是中国的省份或者城市&#xff0c;是能够匹配到对应的经纬度并且正常绘制的&#xff1b;如果所选地区涉及到其他国家或者国外城市&…

Docker-harbor

一、搭建本地私有仓库 1.1 下载Registry镜像 1.2 添加本地私有仓库配置 1.3 重启服务并运行Registry容器 1.4.容器的操作 1.4.1 拉取Nginx镜像并为镜像打标签 1.4.2 上传到私有仓库 1.4.3 列出私有仓库所有镜像 1.4.4 列出私有仓库的镜像的所有标签 1.4.5 先删除原有…

Anaconda删除虚拟环境目录pkgs和envs|conda瘦身

这个文件夹里面是专门放不同环境中的包的&#xff0c;只是没有区分环境&#xff0c;都混在一起了&#xff0c; 一般在想要删除一个虚拟环境&#xff0c;除了在命令行中输入conda remove -n your_env_name(虚拟环境名称) --all 然后在envs中删除虚拟环境的文件夹&#xff0c; 还…

企业微信hook接口协议,ipad协议http,客户群发送任务,获取要发送的客户群列表

客户群发送任务&#xff0c;获取要发送的客户群列表 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid": "1688853790533324","id":1101292747044333637, //群发任务id"keyword…

【Unity】如何获得TMP Button下的text内容

【背景】 unity项目中使用了TMP命名空间的Button UI组件。脚本中需要获得Button下Text的内容,但是发现用TextMeshPro仍然无法获得button下的text对象。 【分析】 Hierarchy结构上看明确Button下是有Text组件的: 括号里是TMP,所以理论上用TextMeshPro类型去FindComponent…

navicat 连接 阿里云 RDS mysql 数据库

首先上官方教程连接 下面是我的实操记录 1、先输入正确的账号、密码 2、再加上数据库名称

鸢尾花分类-pytorch实现

前言 本文用pytorch实现了鸢尾花分类&#xff0c;数据不多&#xff0c;只做代码展示用&#xff0c;后续有升级版本。 代码 -*- coding: utf-8 -*- File : main.py Author: Shanmh Time : 2024/05/06 上午9:37 Function&#xff1a;import torch from sklearn import datase…

算法(C++

题目&#xff1a;螺旋矩阵&#xff08;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09;&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&am…
最新文章