1
2 """
3 Collects data and writes it to a CSV-file. Optionally return a pandas-data-frame
4 """
5
6 import csv
7
8 from PyFoam.Error import warning
9
10 from PyFoam.ThirdParty.six import string_types
11
13 """
14 Collects data like a dictionary. Writes it to a line in a CSV-file.
15 If the dictionary is extended the whole file is rewritten
16 """
18 """@param name: name of the file. If unset no file will be written (only data collected)"""
19 self.name=name
20 self.headers=[]
21 self.headerDict={}
22 self.data=[self.headerDict]
23 self.current={}
24 self.file=None
25 self.writer=None
26 self.renew=True
27
29 """Sets a value in the current dataset
30 @param key: the key
31 @param value: and it's value"""
32
33 if not key in self.headers:
34 self.headers.append(key)
35 self.renew=True
36 self.headerDict[key]=key
37
38 self.current[key]=value
39
41 """Writes a line to disk and starts a new one"""
42
43 self.data.append(self.current)
44 if self.name:
45 if self.renew:
46 if self.file!=None:
47 self.file.close()
48 self.file=file(self.name,"w")
49 self.writer=csv.DictWriter(self.file,self.headers)
50 self.writer.writerows(self.data)
51 self.renew=False
52 else:
53 self.writer.writerow(self.current)
54 self.file.flush()
55 self.current={}
56
58 """Resets the last line"""
59 self.current={}
60
62 """Return the data as a pandas-Dataframe
63 @param usePandas: whether data should be returned in pandas-format.
64 Otherwise numpy"""
65 if usePandas:
66 try:
67 from PyFoam.Wrappers.Pandas import PyFoamDataFrame
68
69 data={}
70 for k in self.headers:
71 vals=[]
72 for d in self.data[1:]:
73 try:
74 v=d[k]
75 except KeyError:
76 v=None
77
78 vals.append(self.__makeSimple(v))
79 data[k]=vals
80 return PyFoamDataFrame(data)
81 except ImportError:
82 warning("pandas-library not installed. Returning 'None'")
83 return None
84 else:
85 try:
86 try:
87 import numpy
88 except ImportError:
89
90 import numpypy
91 import numpy
92 data={}
93 for k in self.headers:
94 vals=[]
95 for d in self.data[1:]:
96 try:
97 v=d[k]
98 except KeyError:
99 v=None
100
101 vals.append(self.__makeSimple(v))
102 data[k]=numpy.array(vals)
103 return data
104 except ImportError:
105 warning("numpy-library not installed. Returning 'None'")
106 return None
107
109 if isinstance(v,string_types):
110 try:
111 return int(v)
112 except ValueError:
113 try:
114 return float(v)
115 except:
116 return v
117 return v
118