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

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

name change to insertedExtract

  • 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       
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                self.subdirlist.append(self.topdir)
38                for item in os.listdir(self.topdir):
39                        if os.path.isfile(os.path.join(self.topdir,item)):
40                                pass
41                        else:
42                            if item[0]=='.':
43                                pass # directory is hidden, ignore
44                            else:
45                                self.subdirlist.append(os.path.join(self.topdir, item))
46                                self.readSubDir(os.path.join(self.topdir, item))                                       
47               
48                print "total"
49                counter = len(self.subdirlist) 
50                print counter
51       
52
53        def getSubDirectories(self):
54                sublist = self.subdirlist
55                #note the first (0) entry in the sub directory list is
56                #actually the top level directory
57                return sublist
58       
59        def getFilesInSubDir(self,sub):
60                filelist=[]
61                for item in os.listdir(sub):
62                        if os.path.isfile(os.path.join(sub,item)):
63                                filelist.append(os.path.join(sub,item))
64                return filelist
65                       
66        def getFirstInSubDir(self,sub):
67                for item in os.listdir(sub):
68                        filename=os.path.join(sub,item)
69                        if os.path.isfile(filename):
70                                if isCSMLSupported(filename):
71                                        return filename
72               
73                                       
74        def getCSMLSupportedFilesInSubDir(self,sub):
75                filelist=[]
76                for item in os.listdir(sub):
77                        filename=os.path.join(sub,item)
78                        if os.path.isfile(filename):
79                                if isCSMLSupported(filename):
80                                        filelist.append(filename)
81                return filelist
82       
83        def getAllCSMLFilesExceptFirst(self,sub):
84                filelist=self.getCSMLSupportedFilesInSubDir(sub)
85                filelist=filelist[1:]
86                return filelist
87       
88        def getAllCSMLSupportedFiles(self):
89                filelist=[]
90                for subdir in self.subdirlist:
91                        for item in os.listdir(subdir):
92                                itempath=os.path.join(subdir,item)
93                                if os.path.isfile(itempath):
94                                        if isCSMLSupported(itempath):
95                                                filelist.append(itempath)
96                                else:
97                                        pass
98                return filelist
99               
100                       
101                       
102                       
103#function to find if file is of a supported CSML type.                   
104def isCSMLSupported(filename):
105        fileExtension = str(filename)[-3:]
106        supported = False
107       
108        try:
109            if fileExtension == '.nc':
110                    supported = True
111            elif fileExtension == '.pp':
112                    supported = True
113            elif fileExtension == 'ctl':
114                    supported = True
115            elif fileExtension == 'xml':
116            #this could be a CDML file. Only way to see is to open it.
117                f=open(filename, 'r')
118                f.readline() #read first line, now read docstring on second line
119                line2=f.readline()
120                if string.find(line2,'http://www-pcmdi.llnl.gov/software/cdms/cdml.dtd') > -1:
121                    supported = True
122                    f.close()
123            elif nappy.readFFI(filename) in [1001,1010,1020,2010,2110,2160,2310,3010,4010]:
124                    supported = True
125        except:
126                #the nappy.readFFI function can fail if permissions are wrong (for example)
127                supported=False
128        return supported
129                               
130                               
Note: See TracBrowser for help on using the repository browser.