Paraview 3.98.1中pvpython的SaveData保存ASCII文件问题求助
我之前处理过老版本ParaView的脚本兼容问题,你的核心困扰其实是:FileType='Ascii'是ParaView新版本SaveData才引入的统一参数,3.98.1的原生writer代理根本不识别这个属性,所以你的设置被直接忽略,writer默认用二进制格式保存了。
快速解决步骤
先确认目标writer的正确属性名
在你的SaveData函数里,拿到writer后临时加一行打印,查看它的所有可用属性,就能找到控制ASCII/二进制的开关:def SaveData(filename, proxy=None, **extraArgs): writer = CreateWriter(filename, proxy, **extraArgs) if not writer: raise RuntimeError ("Could not create writer for specified file or data type") # 临时添加这行,输出writer的所有可配置属性 print("Writer available properties:", writer.ListProperties()) writer.UpdateVTKObjects() writer.UpdatePipeline() del writer运行脚本后,你会看到类似这样的输出(针对VTK legacy格式的writer):
Writer available properties: ['FileName', 'BinaryData', 'Compressor', 'DataMode', ...]找到类似
BinaryData、WriteAscii或者ASCII这类属性——这才是老版本writer用来控制保存格式的有效参数。替换调用参数
假设你查到的属性是BinaryData(这是VTK legacy writer的常用属性),把原来的调用:SaveData(filename, proxy=px, FileType='Ascii')改成:
SaveData(filename, proxy=px, BinaryData=False)如果查到的是
WriteAscii,就用WriteAscii=True来替代。
进阶:让你的SaveData兼容FileType参数
如果你想保留FileType='Ascii'的调用习惯,不用每次都修改参数,可以在SaveData函数里加个参数映射逻辑,自动把新版本的参数转换成老版本writer能识别的属性:
def SaveData(filename, proxy=None, **extraArgs): """Save data produced by 'proxy' in a file. If no proxy is specified the active source is used. Properties to configure the writer can be passed in as keyword arguments. Example usage:: SaveData("sample.pvtp", source0) SaveData("sample.csv", FieldAssociation="Points") """ # 处理FileType到旧版writer属性的映射 if 'FileType' in extraArgs: file_type = extraArgs.pop('FileType').lower() # 可根据你常用的writer类型调整映射规则 if file_type == 'ascii': # 适配VTK legacy writer的BinaryData属性 extraArgs['BinaryData'] = False # 如果是VTK XML格式writer,可能需要设置WriteAscii=True # extraArgs['WriteAscii'] = True elif file_type == 'binary': extraArgs['BinaryData'] = True # extraArgs['WriteAscii'] = False writer = CreateWriter(filename, proxy, **extraArgs) if not writer: raise RuntimeError ("Could not create writer for specified file or data type") writer.UpdateVTKObjects() writer.UpdatePipeline() del writer
这样你原来的SaveData(filename, proxy=px, FileType='Ascii')调用就能正常生效了。
注意事项
不同类型的VTK文件writer(比如legacy .vtk和XML .vtu/.vtp)用的控制属性可能不一样,所以第一步的属性列表查看非常关键,一定要确认你的目标writer对应的正确属性名。
内容的提问来源于stack exchange,提问作者ACR

