source: replication/wdcc/ethz/misc/pfl1.py @ 131

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/replication/wdcc/ethz/misc/pfl1.py@131
Revision 131, 1.9 KB checked in by mjuckes, 6 years ago (diff)

new folder for replication

Line 
1import string
2
3
4class LineParser:
5
6  def __init__(self):
7    self.l = l
8
9
10class counter:
11
12  def __init__(self):
13    self.models = []
14    self.ee = {}
15    self.dupList = []
16    self.dupTidList = []
17
18
19  def pfn(self,fn,md5,tid):
20    bits = string.split(string.split(fn,'.')[0],'_')
21    freq = bits[1]
22    assert (freq == 'fx' and len(bits) == 5) or len(bits) == 6, 'Can not parse %s [1]' % fn
23    var = bits[0]
24    model = bits[2]
25    expt = bits[3]
26    ense = bits[4]
27    if not freq == 'fx':
28      trange = bits[5]
29    dsvid = '%s.%s.%s.%s' % (model,expt,freq,ense)
30    if dsvid not in self.ee.keys():
31      self.ee[dsvid] = [[],[],[]]
32    v =  '%s %s %s' % (fn,tid,md5)
33    if md5 not in self.ee[dsvid][0]:
34      if tid in self.ee[dsvid][1]:
35        it = self.ee[dsvid][1].index(tid)
36        self.dupTidList.append( (tid,md5,fn,self.ee[dsvid][0][it],self.ee[dsvid][2][it],dsvid) )
37      self.ee[dsvid][0].append( md5 )
38      self.ee[dsvid][1].append( tid )
39      self.ee[dsvid][2].append( fn )
40    else:
41      iv = self.ee[dsvid][0].index(md5)
42      assert  self.ee[dsvid][1][iv] == tid, 'files with same md5 and different tid %s ' % md5
43      self.dupList.append((v,self.ee[dsvid][2][iv]) )
44
45  def write(self, oo):
46    keys = self.ee.keys()
47    keys.sort()
48    for k in keys:
49      oo.write( 'dsid=%s\n' % k )
50      ll = self.ee[k]
51      ll.sort()
52      vv = []
53      for i in range(len(ll[0])):
54          vv.append( '%s %s %s' % (ll[2][i],ll[1][i],ll[0][i] ) )
55      vv.sort()
56      for v in vv:
57          oo.write( '%s\n' % v )
58     
59
60##areacella_fx_ACCESS1-0_1pctCO2_r0i0p0.nc
61
62
63c = counter()
64ii = open( 'filelist.txt' ).readlines()
65print len(ii)
66
67kk = 0
68for l in ii:
69  if l[0] != '#':
70    parts = string.split( string.strip(l) )
71    c.pfn( parts[0], parts[2], parts[4] )
72    kk += 1
73    if (kk/50000)*50000 == kk:
74      print kk
75   
76
77print len(c.ee.keys())
78print len(c.dupList), len(c.dupTidList)
79oo = open( 'fl.txt', 'w' )
80c.write( oo )
81oo.close()
Note: See TracBrowser for help on using the repository browser.