Package chianti :: Package fortranformat :: Module FortranRecordWriter'
[hide private]
[frames] | no frames]

Source Code for Module chianti.fortranformat.FortranRecordWriter'

 1  import sys 
 2  IS_PYTHON3 = sys.version_info[0] >= 3 
 3  
 
 4  if IS_PYTHON3: 
 5      exec('from ._output import output as _output') 
 6      exec('from ._lexer import lexer as _lexer') 
 7      exec('from ._parser import parser as _parser') 
 8  else: 
 9      exec('from _output import output as _output') 
10      exec('from _lexer import lexer as _lexer') 
11      exec('from _parser import parser as _parser') 
12  
 
13 -class FortranRecordWriter(object):
14 ''' 15 Generate a writer object for FORTRAN format strings 16 17 Typical use case ... 18 19 >>> header_line = FortranRecordWriter('(A15, A15, A15)') 20 >>> header_line.write(['x', 'y', 'z']) 21 ' x y z' 22 >>> line = FortranRecordWriter('(3F15.3)') 23 >>> line.write([1.0, 0.0, 0.5]) 24 ' 1.000 0.000 0.500' 25 >>> line.write([1.1, 0.1, 0.6]) 26 ' 1.100 0.100 0.600' 27 28 Note: it is best to create a new object for each format, changing the format 29 causes the parser to reevalute the format string which is costly in terms of 30 performance 31 '''
32 - def __init__(self, format):
33 self._eds = [] 34 self._rev_eds = [] 35 self.format = format
36
37 - def __eq__(self, other):
38 if isinstance(other, FortranRecordWriter): 39 return self.format == other.format 40 else: 41 return object.__eq__(self, other)
42
43 - def write(self, values):
44 ''' 45 Pass a list of values correspoding to the FORTRAN format specified 46 to generate a string 47 ''' 48 return _output(self._eds, self._rev_eds, values)
49
50 - def get_format(self):
51 return self._format
52
53 - def set_format(self, format):
54 self._format = format 55 self._parse_format()
56 57 format = property(get_format, set_format) 58
59 - def _parse_format(self):
60 self._eds, self._rev_eds = _parser(_lexer(self.format))
61 62 63 if __name__ == '__main__': 64 import doctest 65 doctest.testmod() 66