当前位置: 首页 > news >正文

营销导向网站建设推特最新消息今天

营销导向网站建设,推特最新消息今天,麻栗坡网站建设,中国企业转让网【Python–XML文件读写】XML文件读写详解 文章目录【Python--XML文件读写】XML文件读写详解1. 前言1.1 介绍1.2 用法2. xml文件内容形式3. xml文件读写3.1 项目框架3.1 写入操作(创建)(create_xml.py)3.2 读取操作(解析…

【Python–XML文件读写】XML文件读写详解

文章目录

  • 【Python--XML文件读写】XML文件读写详解
    • 1. 前言
      • 1.1 介绍
      • 1.2 用法
    • 2. xml文件内容形式
    • 3. xml文件读写
      • 3.1 项目框架
      • 3.1 写入操作(创建)(create_xml.py)
      • 3.2 读取操作(解析)(read_xml.py)
    • 4. 参考

1. 前言

1.1 介绍

XML 指可扩展标记语言XML ,常被设计用来传输和存储数据。

XML 是一种固有的分层数据格式,最自然的表示方式是使用树。 ET为此有两个类 - ElementTree将整个 XML 文档表示为一棵树,并 Element表示该树中的单个节点。与整个文档的交互(从文件读取和写入/从文件写入)通常在ElementTree级别上完成。与单个 XML 元素及其子元素的交互是在Element级别上完成的。

其内元素称作子节点通过 parse() 解析xml文本,返回根元素 tree。(一级节点Annotation) 通过对 tree 进行findall操作,可到到带有指定标签的节点(二级节点eg:filename,object)。

1.2 用法

xml.etree.ElementTree模块实现了用于解析和创建 XML 数据的简单高效的 API。 Element对象有以下常用属性:

  • tag: 标签
  • findall() : 只找到带有标签的 所有节点
  • append() : 增加新节点
  • set():增加或者修改属性
  • text: 去除标签,获得标签中的内容。
  • attrib: 获取标签中的属性和属性值。
  • remove():删除节点
  • 保存xml文件: ElementTree.write()

2. xml文件内容形式

在这里插入图片描述

3. xml文件读写

3.1 项目框架

在这里插入图片描述

3.1 写入操作(创建)(create_xml.py)

from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement
from xml.etree.ElementTree import ElementTree
from xml.dom import minidom'''
生成对应的label, 也就是xml文件
'''# 该函数使xml文件更加美观,也就是换行和缩进
def prettyXml(element, indent, newline, level = 0):'''参数:elemnt为传进来的Elment类;indent用于缩进;newline用于换行;'''# 判断element是否有子元素if element:# 如果element的text没有内容      if element.text == None or element.text.isspace():     element.text = newline + indent * (level + 1)      else:    element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * (level + 1)    # 此处两行如果把注释去掉,Element的text也会另起一行 #else:     #element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * level    temp = list(element) # 将elemnt转成list    for subelement in temp:    # 如果不是list的最后一个元素,说明下一个行是同级别元素的起始,缩进应一致if temp.index(subelement) < (len(temp) - 1):     subelement.tail = newline + indent * (level + 1)else:  # 如果是list的最后一个元素, 说明下一行是母元素的结束,缩进应该少一个    subelement.tail = newline + indent * level   # 对子元素进行递归操作 prettyXml(subelement, indent, newline, level = level + 1)def create(root_dir, img_name, bg_size, count, tg_loca):'''root_dir: 要写到得文件夹下img_name: 对应样本的文件名bg_size: 图片的大小 (w, h)count: 目标的个数tg_loca: 裂缝目标的位置 list[(x_tl, y_tl, x_br, y_br)]'''# 1 annotationannotation = Element('annotation')# 1-1 filenamefilename = SubElement(annotation, 'filename')filename.text = img_name# 1-2 object_countobject_count = SubElement(annotation, 'object_count')object_count.text = str(count)# 1-3 size# -------------------size start--------------------------size = SubElement(annotation, 'size')# 1-3-1 widthwidth = SubElement(size, 'width')width.text = str(bg_size[0])# 1-3-2 heightheight = SubElement(size, 'height')height.text = str(bg_size[1])# 1-3-3 depthdepth = SubElement(size, 'depth')depth.text = '1'# -------------------size end--------------------------# 1-4 segmentedsegmented = SubElement(annotation, 'segmented')segmented.text = '0'# 1-(5 : 5 + count) objectfor i in range(0, count):object = SubElement(annotation, 'object')# 1-(:)-1 namename = SubElement(object, 'name')name.text = 'Crack'# 1-(:)-2 posepose = SubElement(object, 'pose')pose.text = 'Unspecified'# 1-(:)-3 truncatedtruncated = SubElement(object, 'truncated')truncated.text = str(i)# 1-(:)-4 difficultdifficult = SubElement(object, 'difficult')difficult.text = '0'# 1-(:)-5 bndbox# ---------------------bndbox start------------------------------bndbox = SubElement(object, 'bndbox')# xminxmin = SubElement(bndbox, 'xmin')xmin.text = str(tg_loca[i][0])# yminymin = SubElement(bndbox, 'ymin')ymin.text = str(tg_loca[i][1])# xmaxxmax = SubElement(bndbox, 'xmax')xmax.text = str(tg_loca[i][2])# ymaxymax = SubElement(bndbox, 'ymax')ymax.text = str(tg_loca[i][3])# ---------------------bndbox end------------------------------tree = ElementTree(annotation)root = tree.getroot()  prettyXml(root, '\t', '\n')# write out xml datatree.write(root_dir + img_name + '.xml', encoding = 'utf-8')root_dir = "./"
img_name = 'img.jpg'
bg_size = (1024, 1024)
count = 2
tg_loca = [(12, 12, 512, 512), (12, 513, 1000, 1000)]create(root_dir, img_name, bg_size, count, tg_loca)
  • 得到的xml文件如下:
    在这里插入图片描述

3.2 读取操作(解析)(read_xml.py)

import xml.etree.ElementTree as ET
import os
from PIL import Image, ImageDraw, ImageFontdef parse_rec(pic_path, filename):"""解析xml"""tree = ET.parse(filename)  # 解析读取xml函数objects = []coordinate = []for xml_name in tree.findall('filename'):img_path = os.path.join(pic_path, xml_name.text)for obj in tree.findall('object'):obj_struct = {'name': obj.find('name').text, 'pose': obj.find('pose').text,'truncated': int(obj.find('truncated').text), 'difficult': int(obj.find('difficult').text)}bbox = obj.find('bndbox')obj_struct['bbox'] = [int(bbox.find('xmin').text),int(bbox.find('ymin').text),int(bbox.find('xmax').text),int(bbox.find('ymax').text)]objects.append(obj_struct)for obj_one in objects:xmin = int(obj_one['bbox'][0])ymin = int(obj_one['bbox'][1])xmax = int(obj_one['bbox'][2])ymax = int(obj_one['bbox'][3])label = obj_one['name']coordinate.append([xmin,ymin,xmax,ymax,label])return coordinate, img_pathdef visualise_gt(objects, img_path, now_path):img = Image.open(img_path)draw = ImageDraw.ImageDraw(img)for obj in objects:xmin = obj[0]ymin = obj[1]xmax = obj[2]ymax = obj[3]label = obj[4]draw.rectangle(((xmin, ymin), (xmax, ymax)), fill=None, outline="white")draw.text((xmin + 10, ymin), label, "blue")img.save(now_path)if __name__ == "__main__":# 图片路径pic_path = "."# xml文件路径xml_path = "./img.jpg.xml"# 解析后存放地址now_path = "./img_now.jpg"# obj_context:返回一个含有所有标注的信息,img_dir:原始图片路径obj_context, img_path = parse_rec(pic_path, xml_path)visualise_gt(obj_context, img_path, now_path)
  • 原图:(img.jpg)
    在这里插入图片描述

  • 解析后的图:(img_now.jpg)
    在这里插入图片描述

4. 参考

【1】https://blog.csdn.net/qq_48764574/article/details/122052510

http://www.shuangfujiaoyu.com/news/34785.html

相关文章:

  • 如何做网站链接最近新闻事件
  • 医院网站绿色模板武汉seo网站推广培训
  • qq做我女朋友好吗网站友情链接查询工具
  • WordPress免插件实现QQ咨询一键优化下载安装
  • 网站建设业务员培训美国最新新闻头条
  • 济南做网站互联网公司排名百度搜索引擎关键词优化
  • 门户网站设计谷歌seo推广培训班
  • WordPress网站积分系统网站排名提高
  • 网站建设企业文化关键词优化外包
  • 做网站至少要花多少钱世界杯32强排名
  • 网站开发文本编辑器cps推广
  • 广告一家专门做代购的网站推广平台哪个效果最好
  • h5做商城网站农村电商平台
  • 自己可以接单做网站吗广东网站seo
  • 公司网站建设全外链推广是什么意思
  • 网站数据链接怎么做苏州网站制作公司
  • 驾校网站模板网站怎么接广告
  • 二手域名做网站不收录站长综合查询工具
  • 大宇网络做网站怎么样兰州网络优化seo
  • 免费咨询电话新手seo入门教程
  • 婚恋网站如何做自媒体营销搜索引擎推广方式
  • 专业网站制作公司排行南京关键词seo公司
  • 关于建设学校网站策划书的范本西安抖音seo
  • 网页设计与网站建设实验报告中国品牌策划公司排名
  • wordpress修改省略图上海自动seo
  • 重庆南岸网站建设六种常见的网站类型
  • 做销售在那个网站找北京seo推广公司
  • 需要大量做网站做推广的行业如何创建自己的小程序
  • 导航 网站 分析站长平台网站
  • 建网站外包需要多少钱怎么优化网站性能