CFD Online Discussion Forums

CFD Online Discussion Forums (
-   ParaView (
-   -   Extracting ParaView Data into Python Arrays (

Jeffzda January 19, 2012 02:01

Extracting ParaView Data into Python Arrays
Hi all,

When scripting paraview using python, how do I extract raw tuple data from a 'slice' proxy without first exporting to CSV? I used paraview.servermanager.Fetch() function to retrieve the raw data and it looks like the resulting vtk object contains it but I just can't seem to get the actual DATA! Does anyone know what I can do?

Here's what I've done so far:

>>> from paraview.simple import *
>>> File = OpenFOAMReader('file.OpenFOAM')
>>> SliceFile = Slice(File)
>>> DataSliceFile = paraview.servermanager.Fetch(SliceFile)

getting appended
use composite data append
vtkPOpenFOAMReader : [ ...........]
vtkCutter : [ ...........]
vtkReductionFilter : [ ...........]
vtkClientServerMoveData : [ ...........]

>>> print(DataSliceFile)


Cell Data:
Debug: Off
Modified Time: 113008
Reference Count: 1
Registered Events: (none)
Number Of Arrays: 11
Array 0 name = R
Array 1 name = T
Array 2 name = U
Array 3 name = alphat
Array 4 name = epsilon
Array 5 name = k
Array 6 name = kappat
Array 7 name = magT
Array 8 name = nut
Array 9 name = p
Array 10 name = p_rgh
Number Of Components: 18
Number Of Tuples: 400
Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )
Interpolate Flags: ( 1 1 1 1 1 0 0 1 )
Pass Through Flags: ( 1 1 1 1 1 1 1 1 )


Above is only part of the output to the 'print' command but as you can see there are tuples there for the taking! 400 of them. Can anyone help me get to them?

Thanks is advance,


linnemann January 19, 2012 02:44


Try this


numCells = DataSliceFile.GetNumberOfCells()

for x in range(numCells):

print data

or this


numCells = DataSliceFile.GetNumberOfCells()

for x in range(numCells):

print data

It depends on how the data is stored, if its a vtkMultiBlockDataSet or vtkDataSet. This is at least how I get my data.

if DataSliceFile is vtkMultiBlockDataSet then you might need to do some GetBlock(0) thing

This can also give some inspiration.

eelcovv January 23, 2012 06:02

accessing vtk data array example in pvbatch
1 Attachment(s)
I don't know if the post above already answers your question, but here a script I wrote a while ago which I used to obtain the mimumum Uz value plus the position of this minimum over a plane per time step and export these values. Those pvbatch commands to access the data arrays are not very well documented, so perhaps you can get some inspiration by it.


eric_albin December 5, 2012 13:05

1 Attachment(s)
I must be very ignorant but I still do not succeed to do a simple script to access to some points of a data stored in a vts file!
Here is what I try to do :

r = OpenDataFile("THI2D_0000.vts")
pdi = r.PointData
print 'len(pdi):', len(pdi)
ai = pdi[2]
print "Range:", pdi[1].Name
for n in range(pdi.GetNumberOfArrays()):
  print pdi.GetArray(n).GetName(), ' ',
for n in range(pdi.NumberOfArrays):
  print pdi[n].Name, ' ', pdi[n].GetRange()
for k, v in pdi.iteritems():
  print k, v.GetRange()

This just gives me access to the "names" and the "ranges" of the arrays :
p, li { white-space: pre-wrap; } len(pdi): 3
Range: U2
U1 U2 Vort U1 (-0.27383780094, 0.24077918789)
U2 (-0.227040989, 0.28179814685)
Vort (0.00085531204979, 9.2079403574)
U1 (-0.27383780094, 0.24077918789)
U2 (-0.227040989, 0.28179814685)
Vort (0.00085531204979, 9.2079403574)

How can I access to the number of points and to the 10th value of U1 for instance?

linnemann December 6, 2012 02:02


Did this on a windows machine with the python programmable filter inside paraview.


pdi = self.GetInput()
print numPoints
print U10



You should be able to change this to fit your script.

Also extensive use of python object inspector

print dir(pdi)
will print all the calls available to the object pdi.

Hope this helps

eric_albin December 6, 2012 03:49

Dear Linnemann,

Thank you so much for your post.
This really helps me a lot.

In fact, the script you gave works perfectly inside the programmable filter but do not work inside the python shell :

Traceback (most recent call last):
File "<string>", line 33, in <module>
NameError: name 'self' is not defined

This is a normal issue according to these links :

In fact, if I use your command "" inside a python shell, I have only these classes available for pdi :

['FieldData', 'GetArray', 'GetFieldData', 'GetNumberOfArrays', 'NumberOfArrays', 'OutputPort', 'Proxy', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'has_key', 'items', 'iteritems', 'keys', 'values']

I will then try to do the job I have to do inside the programmable filter...
Thanks a lot, Eric

linnemann December 6, 2012 06:10


Here is some code that works in the pvPython script environment.


from paraview.simple import *

r = OpenDataFile("THI2D_0000.vts")
r.SMProxy.UpdatePipeline(0) # If dealing with multiple times

data = servermanager.Fetch(r) #I think this was the only one missing in your original to get the actual data.

print numPoints

print U10



eric_albin December 6, 2012 09:10

Thank you very much again.
This works perfectly in a python shell. With your indications, I can now compute anything I want like the rms fluctuation of velocities both in the programmable filter or directly in the python shell.

I hope this will be useful for other users on the web because this is not straightforward for beginners in python.
a nice day,

All times are GMT -4. The time now is 10:41.