提取值并构建新fi

2024-05-19 03:02:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有“vtu”格式的文件(paraview)作为文本。格式如下:

<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" >
<UnstructuredGrid>
<Piece NumberOfPoints="21" NumberOfCells="20" >
<Points>
<DataArray type="Float64" Name="coordinates" NumberOfComponents="3" format="ascii" >
                  -3.3333333333e-01 1.1111111111e-01 0.0000000000e+00
 -2.7777777778e-01 1.1111111111e-01 0.0000000000e+00
 -1.1111111111e-01 4.4444444445e-01 0.0000000000e+00
</DataArray>
</Points>
<Cells>
<DataArray type="UInt64" Name="connectivity" NumberOfComponents="1" format="ascii" >
       0 1
 2 3
 5 4

它表示网格文件。 我想提取NumberOfPoints和前两个坐标的值,并将它们存储在另一个文件中,如下所示:

^{pr2}$

我不熟悉python,我只能逐行读取文件,但我不知道如何构造上面的文件。在

到目前为止我所学的很简单。对于第一个文件,我能够检测到的行号由

import xml.etree.ElementTree as ET
tree = ET.parse('read.vtu')
root = tree.getroot()

for Piece in root.iter('Piece'):
  print Piece.attrib
  nr = Piece.get('NumberOfPoints')
  print nr

我可以有21:)下一步是添加坐标。但是我不知道如何解析它们,因为我找不到任何连接到它们的节点。在


Tags: 文件nameformatpieceversion格式typeascii
2条回答

试试这个:

import xml.etree.ElementTree as ET
try:
    from cStringIO import StringIO
except:
    from StringIO import StringIO

o = file('out.txt', 'w')

tree = ET.parse('read.vtu')
root = tree.getroot()

for Piece in root.iter('Piece'):
  nr = Piece.get('NumberOfPoints')
  o.write(nr+ '\n')

piece = root.iter('Piece') 
piece = piece.next()
point = piece.getchildren()[0]
dataArr = point.getchildren()
data = dataArr[0]

# Writing to a buffer
output = StringIO()
output.write(data.text)

# Retrieve the value written
crds = output.seek(1)

for l in output:
  ls = l.split( );
  o.write(ls[0]+ '\n')
  o.write(ls[1]+ '\n')

output.close()
o.close()

meshio(我的一个项目)知道VTU格式,所以您可以简单地

pip install meshio

然后呢

^{pr2}$

相关问题 更多 >

    热门问题