博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python遍历文件 python创建XML对象 方法 python解析XML文件 提取ROI坐标计存入文件...
阅读量:6038 次
发布时间:2019-06-20

本文共 5389 字,大约阅读时间需要 17 分钟。

 

原文作者:aircraft

原文地址:https://www.cnblogs.com/DOMLX/p/8213442.html

 

 XML文件???

  xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xml

312
355

 

第一行是XML序言,
。这一行代码会告诉解析器和浏览器,这个文件应该按照1.0版本的XML规则进行解析。 encoding = "utf-8"表示此XML文件采用utf-8的编码格式。 里面的标签都是自己命名定义的 只要符合这种包围的命名都可以 <> 还有注意缩进。 解析xml文件第一步:   
#coding=utf-8import  xml.dom.minidom #打开xml文档
dom = xml.dom.minidom.parse('roi.xml')#得到xml文档元素对象root = dom.documentElement
 

获得了对象之后就可以运用一些对元素标签操作的语法,每一个像<></>这样的标签 都是一个结点,而每一个结点都有它的nodeNamenodeValuenodeType属性,写法是root.nodeName   要注意了这些语法对大小写都是敏感的,错一个大小写都是不行的,一般都符合驼峰的格式。

顾名思义  nodename 就是结点的名字 也就是标签名,nodevalue 就是结点里面的值 或者数据  不过这个只对文本结点有效。

第二步对XML文件进行操作,获取其中的值:

#coding=utf-8import  xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('roi.xml')#得到xml文档元素对象root = dom.documentElement#开始操作 #获取readSession标签集并且继续获取标签集中第一个readSession下的xCoord标签集roiX=root.getElementsByTagName('readingSession')[0].getElementsByTagName('roi')[0].getElementsByTagName('xCoord') #获取到了xCoord第一子集  的子元素的数据  将其打印    firstChild 在这里代表xCoord的文本内容 也是一个文本结点  将文本结点的数据打印print roiX[0].firstChild.data#还可以获取长度xLen = root.getElementsByTagName('readingSession').lengthprint xLen

 

 getElementsByTagName(标签名)这个函数就是用来通过标签名字获取

通过getElementsByTagName(标签名)获取到了标签元素对象  如果这个标签有id属性=“”也可以获取这个标签中的ID, 注意到xCoord中有一个id属性   直接ID=roiX.getAttribute("id")  就可以获取了    

这里还有很多对其操作的方法  就不详细介绍了。

 

接下来看看用Python遍历文件:

 

import os
#这是我的 文件目录路径
path = 'C:\Program Files\Java\jre-9.0.1\lib\jfr'      #将os.walk在元素中提取的值,分别放到root(根目录),dirs(目录名),files(文件名)中。  for root, dirs, files in os.walk(path):    print( "files = ", files)    print len(files)

 

非常简单的代码,这里我只对files文件名进行遍历打印  其他的用法大家看到这个语法就可以自己尝试了。

 

 

 

接下来进入正题  遍历文件解析XML文件 提取坐标集存入文档:

  先看一部分简单版本的XML文件,目标就是将其中X,Y坐标提取存入文件          用途方便后来对数字图像处理的操作

3.12
540461523
Nodule 001
5
1
6
3
3
3
4
5
5
-125.000000
1.3.6.1.4.1.14519.5.2.1.6279.6001.110383487652933113465768208719
TRUE
312
355
311
356
310
357
309
357
308
358

接下来看看PYTHON部分的代码:

# -*- coding: UTF-8 -*-"""Spyder EditorThis is a temporary script file."""#from __future__ import divitionimport  xml.dom.minidomimport ospath = 'C:\Program Files\Java\jre-9.0.1\lib\jfr'#遍历文件夹获取文件名返回数组for root, dirs, files in os.walk(path):    print( "files = ", files)    print len(files)#通过文件名数组,不断的打开XML文件提取坐标for f in range(len(files)):    fpName = files[f]#获取XML文件的除了xml三个后缀之前的名字    nn =str(fpName[0:3])  #对每个XML文件都以相同的名字打开   W的方式  没有文件的话  会自动创建一个出来    fp = open(nn+".txt","w")    print nn    print fpName    #打开XML文档    dom = xml.dom.minidom.parse(fpName)         #得到文档元素对象    root = dom.documentElement    #获取标签集并提取坐标存入文档    drLen= root.getElementsByTagName('readingSession').length    if(drLen != 0):        for s in range(drLen):                drText ="\n\nDR"+str(s+1)+"\n\n"                fp.write(drText)                bb = root.getElementsByTagName('readingSession')[s].getElementsByTagName('roi').length                for i in range(bb):                    roiX = root.getElementsByTagName('readingSession')[s].getElementsByTagName('roi')[i].getElementsByTagName('xCoord')                    xLen = root.getElementsByTagName('readingSession')[s].getElementsByTagName('roi')[i].getElementsByTagName('xCoord').length                    roiY = root.getElementsByTagName('readingSession')[s].getElementsByTagName('roi')[i].getElementsByTagName('yCoord')                    yLen = root.getElementsByTagName('readingSession')[s].getElementsByTagName('roi')[i].getElementsByTagName('yCoord').length                                        xText = "\n    第"+str(i+1)+"个roi的X坐标\n"                    fp.write(xText)                                        #将X坐标全部存入                    roiData =""                    for j in range(xLen):                        roiData+= str(roiX[j].firstChild.data)+","                        fp.write(roiData)                                            yText ="\n    Y坐标\n"                    fp.write(yText)                    for k in range(yLen)   :                        roiData += str(roiX[j].firstChild.data)+","                        fp.write(roiData)                                          fp.close()

 

  以上代码完成后就能形成一个这样的文件:

 

 

 

  如果是遍历解析的话  大概就会形成这样的一堆文件:

 

 

  大家好我是飞机,是一个想成为全栈工程师的男人。

 

转载于:https://www.cnblogs.com/DOMLX/p/8213442.html

你可能感兴趣的文章
eclipse插件
查看>>
Android笔记:通过RadioGroup/RadioButton自定义tabhost的简单方法
查看>>
ELCSlider
查看>>
XCode工程中 Targets详解
查看>>
Ext.Msg.prompt的高级应用
查看>>
Postgres 中 to_char 格式化记录
查看>>
关于联合索引
查看>>
开源 java CMS - FreeCMS2.7 登录移动端管理中心
查看>>
Android FM模块学习之三 FM手动调频
查看>>
Python 设置系统默认编码以及其他编码问题大全
查看>>
Vbs脚本编程简明教程之十四
查看>>
如何UDP/TCP端口是否通了
查看>>
pxe实现系统的自动化安装
查看>>
Redis高可用技术解决方案总结
查看>>
Scale Out Owncloud 高可用(2)
查看>>
何为敏捷
查看>>
HA集群之四:Corosync+Pacemaker+DRBD实现HA Mysql
查看>>
服务器定义
查看>>
我的友情链接
查看>>
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
查看>>