source: TI02-CSML/trunk/csml/csmllibs/csmldirectory.py @ 3279

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml/csmllibs/csmldirectory.py@3279
Revision 3279, 4.2 KB checked in by domlowe, 13 years ago (diff)

docstrings

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#!/usr/bin/env python
2import os,sys
3try:
4    import nappy 
5except ImportError:
6    pass
7    #sys.stdout.write('Could not import NASAAmes interface')
8import sys
9import string
10
11
12class DirectoryTree(object):
13        ''' Represents a directory'''
14        def __init__(self):
15                self.subdirlist=[]
16               
17        def setTopDirectory(self,top):
18                self.topdir=top
19
20        def readSubDir(self, subdir):   
21                for item in os.listdir(subdir):
22                        #print os.path.join(subdir, item)
23                        if os.path.isfile(os.path.join(subdir,item)):
24                                #print 'file: '+ item
25                                pass
26                        else:
27                            if item[0]=='.':
28                                pass # directory is hidden, ignore
29                            else:
30                                self.subdirlist.append(os.path.join(subdir, item))
31                                self.readSubDir(os.path.join(subdir, item))
32                #subdircount=len(self.subdirlist)
33                #print subdircount
34
35               
36        def readDirectory(self):
37                ''' read directory and add listing of files to subdirlist'''
38                self.subdirlist.append(self.topdir)
39                for item in os.listdir(self.topdir):
40                        if os.path.isfile(os.path.join(self.topdir,item)):
41                                pass
42                        else:
43                            if item[0]=='.':
44                                pass # directory is hidden, ignore
45                            else:
46                                self.subdirlist.append(os.path.join(self.topdir, item))
47                                self.readSubDir(os.path.join(self.topdir, item))                                       
48               
49                print "total"
50                counter = len(self.subdirlist) 
51                print counter
52       
53
54        def getSubDirectories(self):
55                ''' get subdirectories in the file'''
56                sublist = self.subdirlist
57                #note the first (0) entry in the sub directory list is
58                #actually the top level directory
59                return sublist
60       
61        def getFilesInSubDir(self,sub):
62                ''' get files in a sub directory'''
63                filelist=[]
64                for item in os.listdir(sub):
65                        if os.path.isfile(os.path.join(sub,item)):
66                                filelist.append(os.path.join(sub,item))
67                return filelist
68                       
69        def getFirstInSubDir(self,sub):
70                ''' get first file in a sub directory'''
71                for item in os.listdir(sub):
72                        filename=os.path.join(sub,item)
73                        if os.path.isfile(filename):
74                                if isCSMLSupported(filename):
75                                        return filename
76               
77                                       
78        def getCSMLSupportedFilesInSubDir(self,sub):
79                ''' get files in sub directory that can be read for CSML content'''
80                filelist=[]
81                for item in os.listdir(sub):
82                        filename=os.path.join(sub,item)
83                        if os.path.isfile(filename):
84                                if isCSMLSupported(filename):
85                                        filelist.append(filename)
86                return filelist
87       
88        def getAllCSMLFilesExceptFirst(self,sub):
89                ''' get all the files that can be read for CSML content except the first one'''
90                filelist=self.getCSMLSupportedFilesInSubDir(sub)
91                filelist=filelist[1:]
92                return filelist
93       
94        def getAllCSMLSupportedFiles(self):
95                ''' get all the files that can be read for CSML content'''
96                filelist=[]
97                for subdir in self.subdirlist:
98                        for item in os.listdir(subdir):
99                                itempath=os.path.join(subdir,item)
100                                if os.path.isfile(itempath):
101                                        if isCSMLSupported(itempath):
102                                                filelist.append(itempath)
103                                else:
104                                        pass
105                return filelist
106               
107                       
108                       
109                       
110                 
111def isCSMLSupported(filename):
112        '''function to find if file is of a supported CSML type.'''
113        fileExtension = str(filename)[-3:]
114        supported = False
115       
116        try:
117            if fileExtension == '.nc':
118                    supported = True
119            elif fileExtension == '.pp':
120                    supported = True
121            elif fileExtension == 'ctl':
122                    supported = True
123            elif fileExtension == 'xml':
124            #this could be a CDML file. Only way to see is to open it.
125                f=open(filename, 'r')
126                f.readline() #read first line, now read docstring on second line
127                line2=f.readline()
128                if string.find(line2,'http://www-pcmdi.llnl.gov/software/cdms/cdml.dtd') > -1:
129                    supported = True
130                    f.close()
131            elif nappy.readFFI(filename) in [1001,1010,1020,2010,2110,2160,2310,3010,4010]:
132                    supported = True
133        except:
134                #the nappy.readFFI function can fail if permissions are wrong (for example)
135                supported=False
136        return supported
137                               
138                               
Note: See TracBrowser for help on using the repository browser.