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

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

some changes to allow cdml to be used as data source, not working properly yet though

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