首页 > 编程语言 >【Python】批量提取Fibersim xml文件中的节点网格数据

【Python】批量提取Fibersim xml文件中的节点网格数据

时间:2023-03-22 21:44:16浏览次数:41  
标签:xml csvline temp mcsvline Python replace prefix Fibersim

程序功能:

  • 输入需求:
    • fibersim导出的ply 的xml文件,可以很多个也没问题。但名字要有规律,不然没法循环读写。比如我自己用的就是x1.xml、x2.xml、Y1.xml......的文件名
    • 定义一些需要的变量,看名字都可以知道什么意思
  • 输出:
    • 程序会输出每个xml文件中每个ply对应的node.csv和mesh.csv

code

import re
# 打开一个txt文本文件,写入所有ply信息
Finfo=open('Plyinfo.txt','w')

# define vars
prefix_1=['x','Y']
prefix_2=range(1,14)
xmlsDir='I:\\3 Group Project\\05 Focus on propeller surface\\20230314\\20230316-xml\\'

# start loop
for q in prefix_1:
    for p in prefix_2:
        print('now='+q+str(p))
        numOfElem=0
        numOfNode=0
        fibersimXmlPath=xmlsDir+q+str(p)+'.xml'
        with open(fibersimXmlPath, 'r',encoding="utf-8") as f1:
            flag=0
            for i in f1:
                if '<Ply' in i:
                    # split string i
                    i=i.split('"')
                    # get the name of Ply
                    ply_name=i[-2]
                    node_file_name=ply_name+'_node.csv'
                    mesh_file_name=ply_name+'_mesh.csv'
                    # Finfo.write('')
                if '<Material' in i:
                    i=i.split('"')
                    ply_thickness=i[-2]
                    # 把ply 铺层的信息都写入为一行,逗号分隔,方便在matlab中使用split和str2num函数转化为可用的检索信息 
                    Finfo.write(ply_name+','+ply_thickness+','+node_file_name+','+mesh_file_name+'\n')
                    
                if '<Mesh_Point_Table' in i :
                    # 检测到节点的起始,打开文件
                    fn = open(node_file_name, 'w')
                    fn.write('node_index,X Coordinate,Y Coordinate,Z Coordinate\n')
                    flag=1
                if '</Mesh_Point_Table' in i:
                    print('!'+q+str(p)+' number of nodes ='+str(numOfNode))
                    flag=0
                    numOfNode=0
                    fn.close()
                    
                if '<Mesh_Polygon_Table' in i :
                    fm = open(mesh_file_name, 'w')
                    fm.write('element_index,Node 1,Node 2,Node 3,Warp ,Weft\n')
                    flag=2
                if '</Mesh_Polygon_Table' in i:
                    print('!'+q+str(p)+'  number of elements ='+str(numOfElem))
                    print(numOfElem)
                    fm.close()
                    numOfElem=0
                    flag=0
                #进入下一行
                # true则表示,现在遍历为节点信息
                if '<R/>' in i:
                    # 说明现在是单元信息
                    if flag==2:
                        # elem index
                        numOfElem=numOfElem+1
                        temp=i.replace('<R/>','')
                        mcsvline=temp.replace(' ', ',')
                        mcsvline=str(numOfElem)+','+mcsvline
                        fm.write(mcsvline)
                    elif flag==1 :
                       # , not in i 说明现在是节点信息
                        numOfNode=numOfNode+1
                        temp=i.replace('<R/>','')
                        csvline=temp.replace(' ', ',')
                        csvline=str(numOfNode)+','+csvline
                        fn.write(csvline)
Finfo.close()

标签:xml,csvline,temp,mcsvline,Python,replace,prefix,Fibersim
From: https://www.cnblogs.com/aksoam/p/17245575.html

相关文章

  • 深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析
    深入理解Python虚拟机:字典(dict)的实现原理及源码剖析在本篇文章当中主要给大家深入介绍一下在cpython当中字典的实现原理,在本篇文章当中主要介绍在早期python3当中的......
  • python 中实现文件的复制
     001、(base)[root@PC1test3]#ls##测试数据及脚本a.txttest.py(base)[root@PC1test3]#cattest.py##复制程序importosos.popen('......
  • python中的pickle库
    1.1持久化模块pickle模块是Python专用的持久化模块,所谓的持久化就是让数据持久化保存,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存储。但是持久......
  • python表格处理--1
    importnumpyasnp#a=np.array([1,2,4,5])#创建一组数组#b=np.array([[1,2],[3,4],[5,6]])#创建二维数组#x=np.arange(5)#1个参数,起点取......
  • Idea 使用问题 pom.xml 问题
    pom文件提示失效标签颜色都变了xml文件变成灰色问题查看是否缺少*.xml这条规则添加完再试一下,我也是今天出现这个问题的原文:https://www.cnblogs.......
  • Python中事件驱动
    提示:如果要回顾视频,直接从第8分钟开始看事件驱动可以说是一个概念,还是用一个官方的语言来讲解一下吧事件驱动专业的解释是指在持续事务管理中,进行决策的一......
  • Python 面向对象
    Python面向对象目录Python面向对象1编程范式介绍1.1面向过程编程(ProceduralProgramming)1.2面向对象编程2面向对象编程(Object-OrientedProgramming)2.1Class......
  • Python 四大主流 Web 编程框架
    目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及......
  • Python3 RabbitMQ
    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循MozillaPublicLicense开源协议。MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序......
  • Python互联网大数据爬虫的武汉市二手房价格数据采集分析:Linear Regression模型、XGBoo
    全文链接:http://tecdat.cn/?p=31958原文出处:拓端数据部落公众号分析师:YanLiu我国有大量的资金都流入了房地产行业,同时与其他行业有着千丝万缕的联系,可以说房地产行业对......