【问题标题】:paraview python scripting equivalent of File->save Dataparaview python 脚本相当于 File->save Data
【发布时间】:2013-07-25 09:45:11
【问题描述】:

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

现在,我采取的步骤是:

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

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

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

【问题讨论】:

    标签: python paraview


    【解决方案1】:

    在 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()
    

    【讨论】:

    • 谢谢!它只需要说“CreateWriter('foo.csv', reader)”,然后它对我有用
    【解决方案2】:

    我在处理 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. """"
    

    【讨论】:

    • 对于directory,您可以使用glob
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2013-07-18
    相关资源
    最近更新 更多