Package PyFoam :: Package Basics :: Module CSVCollection
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Basics.CSVCollection

  1  #  ICE Revision: $Id: $ 
  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   
12 -class CSVCollection(object):
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 """
17 - def __init__(self,name=None):
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
28 - def __setitem__(self,key,value):
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
40 - def write(self):
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
57 - def clear(self):
58 """Resets the last line""" 59 self.current={}
60
61 - def __call__(self,usePandas=True):
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 # assume this is pypy and retry 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
108 - def __makeSimple(self,v):
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