NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

Changeset 63

Show
Ignore:
Timestamp:
07/26/07 19:12:24
Author:
cbc
Message:

Refactor Header and Body classes for elegance and readability (zip instead of for loop; join and strip instead of named group re match).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sodar/trunk/sodar/data.py

    r62 r63  
    7575    def __init__(self,header): 
    7676        super(Header,self).__init__() 
    77         headerLines = [headerLine.strip() 
    78                        for headerLine in header.split('\n') 
    79                        if headerLine] 
    80         # every other line contains parameter names; 
     77        headerLines = header.split('\n') 
     78        # every other line contains parameter keys; 
    8179        # every other line contains parameter values 
    82         parametersPairs = [(headerLine, 
    83                             headerLines[headerLines.index(headerLine)+1]) 
    84                            for headerLine in headerLines[::2]] 
    85         for parameterNames,parameterValues in parametersPairs: 
    86             # parameter names must be valid Python identifiers 
    87             # for named groups matching 
    88             parameterNames = [parameterName.strip('#') 
    89                               for parameterName in parameterNames.split()] 
    90             parameterPattern = re.compile(r'(?P<' + 
    91                                           '>\S+)\s+(?P<'.join(parameterNames) + 
    92                                           '>.*$)') 
    93             self.update(parameterPattern. 
    94                         match(parameterValues). 
    95                         groupdict()) 
     80        self.update(dict(zip(" ".join(headerLines[::2]).split(), 
     81                             " ".join(headerLines[1::2]).split()))) 
    9682 
    9783class Body(list): 
     
    10288    def __init__(self,body): 
    10389        super(Body,self).__init__() 
    104         bodyLines = [bodyLine.strip() 
    105                      for bodyLine in body.split('\n') 
    106                      if bodyLine] 
    107         parameterNames = [parameterName 
    108                           for parameterName in bodyLines[0].split()] 
    109         parameterPattern = re.compile(r'(?P<' + 
    110                                       '>\S+)\s+(?P<'.join(parameterNames) + 
    111                                       '>.*$)') 
    112         self.extend([parameterPattern.match(bodyLine).groupdict() 
     90        bodyLines = body.split('\n') 
     91        bodyKeys = bodyLines[0].split() 
     92        self.extend([dict(zip(bodyKeys, bodyLine.split())) 
    11393                     for bodyLine in bodyLines[1:]]) 
    11494        self.reverse()             
     
    140120        print "Failure to read test data" 
    141121    data = Data(data) 
    142     print '   --- Sample ---\n'.join(data.samples) 
     122    print data['2007-06-01-09-15']['70']['SPEED'] 
    143123 
    144124if __name__ == "__main__":