【医学影像数据处理】 XML 文件格式处理汇总

这篇具有很好参考价值的文章主要介绍了【医学影像数据处理】 XML 文件格式处理汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

xml(Extensible Markup Language,简称:XML)可扩展标记语言,是一种netconf配置文件的格式。是一种固有的分层数据格式,最自然的表示方式是解析成树状。 但是,xml这样的标签数据,是面向“机器”识别的,是不利于“人类”识别的,所以看起来会比较的麻烦。

2003年5月成立了Netconf工作组,该工作组主要是为了提出一个全新的基于XML的网络配置(NETCONF)协议而成立的。

Python内置的API:xml.etree.ElementTree 可以解析xml文件。ElementTree将整个xml文档解析成树状结构, Element就表示这个树状结构中的单节点。

官方文件地址:The ElementTree XML API

后面举例以下面这个xml的文件形式展开,这也是官方给出的一个案例。xml文档实例如下:

xml文档实例如下:

<?xml version="1.0"?>
<data id="world country">
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

一、xml 数据格式

Element常用属性对应的xml格式,如下:

<tag attrib=“netmiko_inventory”>text</tag>

例:

<device_type desc="platform">cisco_ios</device_type>
    tag       attrib         text       tag

其中:

1、 tag:是str对象,表示xml标签,例子中的前后闭合的device_type
2、 attrib:是一个dict对象,表示xml属性,例子中的desc="platform"
3、 text:是xml数据标签包裹的内容,也是Element的内容,例子中的 cisco_ios
4、 child elements:则是xml一对标签中包含的子集,如下图,类似于country 标签中包裹的内容

举例:

import xml.etree.ElementTree as ET

# 读取、解析文件,获取跟元素
tree = ET.parse('sample.xml')
root = tree.getroot()

# 获取根元素的标签名称以及所有属性
# data
print('root.tag:', root.tag)
print('root.attrib:', root.attrib)

# 获取text
print(root[0][1].text)

输出结果:

root.tag: data
root.attrib: {'id': 'world country'}
2008

二、查找方法

Element有很丰富的查找方法,总结如下:

  • iter(tag=None): 遍历Elementchild,可以指定tag精确查找;
  • findall(match) :查找当前元素tagpath能匹配的child节点;
  • find(match) :查找当前元素tagpath能匹配的第一个child节点;
  • get(key, default=None) :获取元素指定key对应的attrib,如果没有attrib,返回default
# 一次性获取所有名为 country 的元素、然后遍历
for country in root.findall('country'):
    # 获取 country 元素中的 name 属性
    name = country.get('name')

    # 寻找名为 rank 的子节点,获取其text
    rank = country.find('rank').text

    # 一次性获取所有名为 country 下 neighbor的元素、然后遍历
    neighbors = country.findall('neighbor')

    neighbor_name = []
    for neighbor in neighbors:
        n = neighbor.get('name')
        neighbor_name.append(n)
    print(name, rank, neighbor_name)

打印结果如下:

Liechtenstein 1 ['Austria', 'Switzerland']
Singapore 4 ['Malaysia']
Panama 68 ['Costa Rica', 'Colombia']

三、iter迭代器

Element使用iter迭代器可以递归地遍历它下面的所有child

# 一次性获取所有名为 country 的元素、然后遍历
for country in root.iter('country'):
    # 获取 country 元素中的 name 属性
    name = country.get('name')
    print(name)

for rank in root.iter('rank'):
    # 获取 country 元素中的 name 属性
    rank_n = rank.text
    print(rank_n)

打印结果如下:

Liechtenstein
Singapore
Panama

1
4
68

四、xml数据转换成字典

xmltodict使用非常的简单,学习成本很低,可以快速的把xml格式的数据转换成字典,轻松进行数据二次加工。

代码如下:

import xmltodict, json

with open('sample.xml') as f:
    my_dict = xmltodict.parse(f.read())
    
with open('info1.json', 'w') as f:
    json.dump(my_dict, f, sort_keys=False, indent=2)

打开info1.json查看,保存的内容如下:

{
  "data": {
    "@id": "world country",
    "country": [
      {
        "@name": "Liechtenstein",
        "rank": "1",
        "year": "2008",
        "gdppc": "141100",
        "neighbor": [
          {
            "@name": "Austria",
            "@direction": "E"
          },
          {
            "@name": "Switzerland",
            "@direction": "W"
          }
        ]
      },
      {
        "@name": "Singapore",
        "rank": "4",
        "year": "2011",
        "gdppc": "59900",
        "neighbor": {
          "@name": "Malaysia",
          "@direction": "N"
        }
      },
      {
        "@name": "Panama",
        "rank": "68",
        "year": "2011",
        "gdppc": "13600",
        "neighbor": [
          {
            "@name": "Costa Rica",
            "@direction": "W"
          },
          {
            "@name": "Colombia",
            "@direction": "E"
          }
        ]
      }
    ]
  }
}

其中:

  • tagattrib都会变成字典的key,例如,上面的data、id、country、name、rank等等;
  • 但是,带有属性attribkey,会自动加入@符号,其他不会;
  • key对应的value,会变成字符串形式。

五、保存成xml

xmltodict不仅可以将xml转为字典形式,还可以将字典转成xml形式,存储到本地,如下所示:

def saveXML():
    import xmltodict

    with open('info.xml', 'w') as f:
           info_dict = {
                   'dev_info': {
                           'device_type': 'cisco_ios',
                           'username': 'admin',
                           'password': 'cisco',
                           'ip': '192.168.47.10'
                  }
          }
           f.write(xmltodict.unparse(info_dict, pretty=True))

保存为xml文件后,打开查看结果如下:

<?xml version="1.0" encoding="utf-8"?>
<dev_info>
	<device_type>cisco_ios</device_type>
	<username>admin</username>
	<password>cisco</password>
	<ip>192.168.47.10</ip>
</dev_info>

六、总结

前面对xml文件做了简单的学习,包括什么是xml,以及在python中怎么读取、操作和存储为xml文件。同时将机器友好的xml文件,转成对人友好的字典查看。xml确实不太好查看和解析,弄起来有些费劲啊。文章来源地址https://www.toymoban.com/news/detail-716249.html

到了这里,关于【医学影像数据处理】 XML 文件格式处理汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 医院影像科PACS系统源码,医学影像系统,支持MPR、CPR、MIP、SSD、VR、VE三维图像处理

    PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取和使用。 PACS系统还提供了辅助诊断和管理功

    2024年02月03日
    浏览(58)
  • TCIA (The Cancer Imaging Archive)--医学影像数据集

    TCIA (The Cancer Imaging Archive):是一个包含常见肿瘤(肺癌、前列腺癌等)医学图像及相应临床信息(治疗方案细节、基因、病理等)的大规模公用数据库,其影像模态包括MRI、CT等,图像格式均为DICOM,并且网站内数据在持续增加。所有数据都是由TCIA整理并管理。它是癌症研究

    2024年02月11日
    浏览(49)
  • 半监督医学影像分割综述

    两种不同类型的图像分割问题。 相应的语义类对每个像素进行分类,从而给图像中属于这个类的所有对象或区域一个相同的类标签。 实例分割试图更进一步,试图区分同一类的不同出现 内容 提供了半监督SS方法的最新分类以及对它们的描述。 对文献中最广泛使用的数据集进

    2024年02月03日
    浏览(48)
  • 医学影像系统【简称PACS】源码

    PACS(Picture Archiving and Comuniations Systems)即PACS,图像存储与传输系统,是应用于医院中管理医疗设备如CT,MR等产生的医学图像的信息系统。目标是支持在医院内部所有关于图像的活动,集成了医疗设备,图像存储和分发数字图像在重要诊断和会诊时的显示,图像归档,以及外部

    2024年02月07日
    浏览(45)
  • C#开发PACS医学影像三维重建(一):使用VTK重建3D影像

    VTK简介:   VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的。 因为使用C#语言开发,而VTK是C++的,所以推荐使用VTK的.Net开发库:ActiViz。 本系列文章主要以技术和代码讲解为

    2024年02月09日
    浏览(66)
  • 人工智能与医学影像:智能诊断和治疗

    人工智能(AI)已经成为医学影像诊断和治疗的关键技术之一。随着数据量的增加,计算能力的提升以及算法的创新,AI 在医学影像分析领域的应用不断拓展。这篇文章将介绍人工智能如何应用于医学影像诊断和治疗,以及其背后的核心概念、算法原理和具体实例。 医学影像诊

    2024年02月19日
    浏览(51)
  • 医学影像系统弱监督语义分割集成的探索

    利用复杂数据集的低质量CAM预测来提高结果的准确性 使用低阈值CAMs以高确定性覆盖目标对象 通过组合多个低阈值cam,在突出显示目标对象的同时均匀地消除它们的错误 代码链接 文章链接 首先,在目标数据集上训练分类器模型(resnet) 其次,使用Grad-CAM为不同的分类器创建

    2023年04月09日
    浏览(44)
  • Med-YOLO:3D + 医学影像 + 检测框架

      论文链接:https://arxiv.org/abs/2312.07729 代码链接:https://github.com/JDSobek/MedYOLO 提出背景 :人工智能已经应用于大量的医学影像的识别,但是还缺少通用的3D医学影像检测框架。 在中大尺寸结构(如心脏、肝脏和胰腺)上的性能非常高。 然而,模型在处理非常小或罕见的结构时

    2024年01月22日
    浏览(54)
  • Transformer在医学影像中的应用综述-分类

    总体结构 Point-of-Care Transformer(POCFormer):利用Linformer将自注意的空间和时间复杂度从二次型降低到线性型。POCFormer有200万个参数,约为MobileNetv2的一半,因此适合于实时诊断。 Vision Outlooker (VOLO):新注意机制,将精细级特征编码为ViT token 表征,从而提高分类性能。 Swin Transfor

    2024年02月11日
    浏览(39)
  • 图像识别技术在医疗领域的革命:探索医学影像诊断的未来

    导言: 随着人工智能和计算机视觉的快速发展,图像识别技术在医疗领域正掀起一场革命。医学影像诊断是医疗工作中的重要环节,而图像识别技术的引入为医生提供了更准确、高效的辅助手段。本文将深入探讨图像识别技术在医疗领域的应用,以及它对医学影像诊断的革命

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包