source: nappy/trunk/nappy/na_file/na_file_1010.py @ 3414

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/nappy/trunk/nappy/na_file/na_file_1010.py@3414
Revision 3414, 3.8 KB checked in by astephen, 12 years ago (diff)

Tidied up _fixHeaderLength in na_file.py.
Changed write interface so self.write(na_dict, delimiter, float_format)
is a separate call to creating the instance.
Fixed unit tests to cope with this.

BUT: broke nappy_api.openNAFile(<file>, "w") with these changes.
Hence need to think about changes being made to openNAFile() so that it
can predict (or not) the FFI.

Only 1001 unit test (worked on by CK) is broken at present.

Line 
1#   Copyright (C) 2004 CCLRC & NERC( Natural Environment Research Council ).
2#   This software may be distributed under the terms of the
3#   Q Public License, version 1.0 or later. http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
4
5"""
6naFile1010.py
7=============
8
9Container module for NAFile1010 class.
10
11"""
12
13# 08/05/04 updated by selatham for bug fixes and new write methods
14
15# Imports from python standard library
16
17# Imports from local package
18import nappy.utils.text_parser
19import nappy.na_file.na_file_1001
20
21class NAFile1010(nappy.na_file.na_file_1001.NAFile1001):
22    """
23    Class to read, write and interact with NASA Ames files conforming to the
24    File Format Index (FFI) 1010.
25    """
26
27    def readHeader(self):
28        """
29        Reads FFI-specifc header section.
30        """       
31        self._readCommonHeader()
32        self.DX = nappy.utils.text_parser.readItemsFromLine(self.file.readline(), self.NIV, float)
33        self.XNAME = nappy.utils.text_parser.readItemsFromLines(self._readLines(self.NIV), self.NIV, str)
34        self._readVariablesHeaderSection()
35        self._readAuxVariablesHeaderSection()
36        self._readComments()
37
38    def writeHeader(self):                                                             
39        """                                                                                     
40        Writes FFI-specifc header section.                                     
41        """                                                                                     
42        self._writeCommonHeader()                                               
43        self.header.write(("%s " * self.NIV + "\n") % tuple(self.DX))                   
44        self.header.write("%s\n" * self.NIV % tuple(self.XNAME))                       
45        self._writeVariablesHeaderSection()                                     
46        self._writeAuxVariablesHeaderSection()                                 
47        self._writeComments()                                                   
48        self._fixHeaderLength()
49        self.file.write(self.header.read())
50
51    def _setupArrays(self):
52        """
53        Sets up FFI-specific arrays to fill with data (lists of lists).
54        """       
55        self.X = []
56        self.V = []
57        self.A = []
58
59        for n in range(self.NV):
60            self.V.append([])
61        for a in range(self.NAUXV):
62            self.A.append([])
63
64    def _readData1(self, datalines, ivar_count): 
65        """
66        Reads first line/section of current block of data.
67        """
68        # Start with independent and Auxilliary vars
69        (x2_and_a, rtlines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, 1 + self.NAUXV, float)
70        (x, aux) = (x2_and_a[0], x2_and_a[1:])
71        self.X.append(x)
72
73        count = 0
74        for a in range(self.NAUXV):
75            self.A[a].append(aux[count])
76            count = count + 1
77        return rtlines
78   
79    def _readData2(self, datalines, ivar_count):
80        """
81        Reads second line/section (if used) of current block of data.
82        """       
83        # Now get the dependent variables
84        (v, rtlines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, self.NV, float)             
85                                       
86        count = 0
87        for n in range(self.NV):                               
88            self.V[n].append(v[count])                                                 
89            count = count + 1
90
91        return rtlines
92
93    def writeData(self):                                                                       
94         """                                                                                   
95         Writes the data section of the file.                                           
96         This method can be called directly by the user.                       
97         """                                                                                   
98         for m in range(len(self.X)):                                                   
99             # Write Independent variable mark and auxiliary variables         
100             var_string = "%s    " % self.X[m]   
101                                       
102             for a in range(self.NAUXV):                                               
103                 var_string = var_string + ("%s    " % self.A[a][m])   
104       
105             self.file.write("%s\n" % var_string.rstrip())     
106                       
107             # Write dependant variables                                               
108             var_string = ""                                                           
109             for n in range(self.NV):                                                   
110                  var_string = var_string + ("%s    " %self.V[n][m])   
111       
112             self.file.write("%s    \n" % var_string)                                   
Note: See TracBrowser for help on using the repository browser.