8

我想自动从 vtk/vtu 文件中导出 csv 文件。

现在,我采取的步骤是:

  • 打开视窗
  • 加载存储所有 vtu 文件信​​息的 pvd 文件(我的 PDE 模拟中的每个时间步长一个)
  • 转到左侧的属性选项卡,点击“应用”
  • File->save Data... 提供基本文件名,选择“points”和“write all timesteps”

这会为每个时间步长写入一个名为 basefilename#timestepno#.csv 的 csv 文件

有没有办法从命令行执行此操作(计算机上没有进行计算的 X 服务器),例如使用 python 接口?

4

2 回答 2

10

在 UI 中的 Python Shell 或使用pvpythonpvbatch Python 可执行文件中尝试以下操作。

from paraview import simple
reader = simple.OpenDataFile("..../foo.pvd")
writer = simple.CreateWriter("..../foo.csv", reader)
writer.WriteAllTimeSteps = 1
writer.FieldAssociation = "Points"
writer.UpdatePipeline()
于 2013-07-31T23:41:53.213 回答
4

我对 pvtu 文件有类似的问题,并用下面的脚本解决了它。我在 Paraview -> 工具 -> Python Shell 中使用 execfile("SCRIPTNAME") 运行脚本。我希望这有帮助。

——莱因哈德

from paraview.simple import *
import os

"""Function that counts number of files
with specific extension in directory """
def directory(path,extension):
  list_dir = []
  list_dir = os.listdir(path)
  count = 0
  for file in list_dir:
    if file.endswith(extension): # eg: '.txt'
      count += 1
  return count

"""Choose input/output directory and filenames"""
pvtu_input_directory = "thin_1000_0.4/mesh/"
csv_output_directory = "thin_1000_0.4/csv/"
input_filename_root = "output"
output_filename_root = "output"

""" Create output directory """
os.system('mkdir '+csv_output_directory)

"""Start Loop over all files """
number_of_pvtu = directory(pvtu_input_directory,'.pvtu')
for index in range(1,number_of_pvtu):
    in_filename = input_filename_root + "%0.4d" % index+".pvtu"
    out_filename = output_filename_root + "%0.4d" % index +".csv"
    loadfile = pvtu_input_directory + in_filename
    writefile = csv_output_directory + out_filename
    r = XMLPartitionedUnstructuredGridReader( FileName=loadfile)
    writer = CreateWriter(writefile,r)
    writer.FieldAssociation = "Points"
    writer.UpdatePipeline()

""" That's it. """"
于 2013-07-30T12:42:00.253 回答