source: issm/trunk-jpl/src/py3/exp/expread.py@ 19895

Last change on this file since 19895 was 19895, checked in by bdef, 9 years ago

NEW:Adding directory to hold the python 3 implementation of the interface

File size: 2.5 KB
Line 
1import os.path
2import numpy
3from collections import OrderedDict
4import MatlabFuncs as m
5
6def expread(filename):
7 """
8 EXPREAD - read a file exp and build a Structure
9
10 This routine reads a file .exp and builds a list of dicts containing the
11 fields x and y corresponding to the coordinates, one for the filename of
12 the exp file, for the density, for the nodes, and a field closed to
13 indicate if the domain is closed.
14 The first argument is the .exp file to be read and the second one (optional)
15 indicate if the last point shall be read (1 to read it, 0 not to).
16
17 Usage:
18 contours=expread(filename)
19
20 Example:
21 contours=expread('domainoutline.exp')
22 contours=expread('domainoutline.exp')
23
24 See also EXPDOC, EXPWRITEASVERTICES
25 """
26
27 #some checks
28 if not os.path.exists(filename):
29 raise OSError("expread error message: file '%s' not found!" % filename)
30
31 #initialize number of profile
32 contours=[]
33
34 #open file
35 fid=open(filename,'r')
36
37 #loop over the number of profiles
38 while True:
39
40 #update number of profiles
41 contour=OrderedDict()
42
43 #Get file name
44 A=fid.readline()
45 while A=='\n':
46 A=fid.readline()
47 if not A:
48 break
49 A=A.split(None,1)
50 if not (len(A) == 2 and m.strcmp(A[0],'##') and m.strncmp(A[1],'Name:',5)):
51 break
52 if len(A[1])>5:
53 contour['name']=A[1][5:-1]
54 else:
55 contour['name']=''
56
57 #Get Icon
58 A=fid.readline().split(None,1)
59 if not (len(A) == 2 and m.strcmp(A[0],'##') and m.strncmp(A[1],'Icon:',5)):
60 break
61
62 #Get Info
63 A=fid.readline().split()
64 if not (len(A) == 4 and m.strcmp(A[0],'#') and m.strcmp(A[1],'Points')):
65 break
66
67 #Get number of nodes and density
68 A=fid.readline().split()
69 contour['nods']=int(A[0])
70 contour['density']=float(A[1])
71
72 #Get Info
73 A=fid.readline().split()
74 if not (len(A) == 5 and m.strcmp(A[0],'#') and m.strcmp(A[1],'X') and m.strcmp(A[2],'pos') \
75 and m.strcmp(A[3],'Y') and m.strcmp(A[4],'pos')):
76 break
77
78 #Get Coordinates
79 contour['x']=numpy.empty(contour['nods'])
80 contour['y']=numpy.empty(contour['nods'])
81 for i in range(int(contour['nods'])):
82 A=fid.readline().split()
83 contour['x'][i]=float(A[0])
84 contour['y'][i]=float(A[1])
85
86 #Check if closed
87 if (contour['nods'] > 1) and \
88 (contour['x'][-1] == contour['x'][0]) and \
89 (contour['y'][-1] == contour['y'][0]):
90 contour['closed']=True
91 else:
92 contour['closed']=False
93
94 contours.append(contour)
95
96 #close file
97 fid.close()
98
99 return contours
100
Note: See TracBrowser for help on using the repository browser.