""" Module to handle Scintec sodar .mnd files. >>> from sodar.scintec import maindata """ __author__ = 'Chris Calloway' __email__ = 'cbc@chriscalloway.org' __copyright__ = 'Copyright 2009 UNC-CH Department of Marine Science' __license__ = 'GPL2' class MainData(list): """ Class to parse Scintec sodar .mnd files. Parse the a known good .mnd file: >>> main_data = MainData(good_mnd) Parse the format header: >>> len(main_data._format_header) 4 >>> main_data._format_header[0] 'FORMAT-1' Parse the file header after the format header: >>> len(main_data._file_header_body) 26 >>> main_data._file_header_body[1] '# file information' Parse the profile data: >>> len(main_data) 48 Parse the first profile: >>> len(main_data[0]) 41 >>> main_data[0][0] '2009-11-17 00:30:00 00:30:00' >>> main_data[0][-1] '200 99.99 999.9 -0.07 99.99 9.99E+37 0' Parse the last profile: >>> len(main_data[-1]) 41 >>> main_data[-1][0] '2009-11-18 00:00:00 00:30:00' >>> main_data[-1][-1] '200 15.05 71.8 -0.19 0.53 9.99E+37 0' """ def __init__(self, mnd, *args): """ Parse main daily Scintec sodar .mnd file. MainData(mnd[,file_name[,file_path]]) -> Where: mnd is a str object containing the complete contents read from a Scintec .mnd daily sodar file including all line endings, file_name is an optional string object representing a file name for a file which contains the referenced .mnd daily sodar file, file_path is an optional string object representing the path to file_name. Parse a known good .mnd file: >>> main_data = MainData(good_mnd) >>> main_data = MainData(good_mnd,good_name) >>> main_data.file_name == good_name True >>> main_data = MainData(good_mnd,good_name,good_path) >>> main_data.file_name == good_name True >>> main_data.file_path == good_path True """ super(MainData, self).__init__() self.file_name = '' self.file_path = '' try: self.file_name = str(args[0]) self.file_path = str(args[1]) except IndexError: pass print mnd self._blocks = [self._block.strip() for self._block in mnd.split('\n\n') if self._block.strip()] self._format_header = [self._line.strip() for self._line in self._blocks[0].split('\n') if self._line.strip()] self._file_header_body = [self._line.strip() for self._line in self._blocks[1].split('\n') if self._line.strip()] self.extend([[self._line.strip() for self._line in self._block.split('\n') if self._line.strip()] for self._block in self._blocks[2:]]) def _test(): """ Run module tests in script mode. >>> from sodar.scintec.maindata import _test """ import doctest from sodar.tests import suite good_mnd = suite.setUpGoodMndData() doctest.testmod(extraglobs=dict(good_mnd=good_mnd)) if __name__ == "__main__": _test()