def setup( az): d2sykr = dictOrder() d2vse = dictOrder() for a in az.dejnosti.strip().split( '\n'): xx = a.split() if not xx: continue k = xx[0] podrazb = k[0] == '*' k = k.replace('*', '') if podrazb: az.dejnost_podrazbirane = k dd = [] sykr = [] sykr_avto = [] for v in xx: v = v.lstrip('*') if v[0]=='.': appendif( sykr, v[1:] ) v = v.lstrip('.') if '*' in v: l,r = v.split('*') vv = [ l+r[:i] for i in range( len(r))] extendif( dd, vv) extendif( sykr_avto, vv) appendif( dd, v.replace('*','')) d2vse[ k] = dd dd += [ v.replace('-',' ') for v in dd if '-' in v ] dd += [ cyr2lat( v) for v in dd ] extendif( sykr, sorted( sykr_avto, key= len)) if sykr: d2sykr[k] = sykr az.dejnosti = d2vse az.dejnosti4vse = dict_lower( (v,k) for k,vv in d2vse.items() for v in vv ) az.dejnosti4vse.update( (k,k) for k in d2vse ) az.dejnosti2sykr = dict( (k,v[0]) for k,v in d2sykr.items() ) ds = az.dejnosti4sykr = dict( (v,k) for k,vv in d2sykr.items() for v in vv ) d = '('+'|'.join( ds.keys() )+')' az.re_dejnost0 = '('+d+'([.+]|\.\+))*'+d+'\.' az.re_dejnost = re.compile( '^'+az.re_dejnost0) #1 az.re_dejnost_ = re.compile( '(^| )('+ az.re_dejnost0 +'*) +') #много az.dejnosti_vazhni = [ l.split()[0].replace('*','') for l in (az.dejnosti1+az.dejnosti3).strip().split( '\n') if l.strip() ]
def varianti( v): dd = [ v.replace('*','') ] if '*' in v: l,r = v.split('*') for d in [ l+r[:i] for i in range( len(r))]: #len+1 == v appendif( dd, d) appendif( dd, *[ v.replace('-','') for v in dd if '-' in v ]) appendif( dd, *[ cyr2lat( v) for v in dd]) if v.isdigit(): appendif( dd, int(v)) return dd
def izdanie_razglobi( izdanie): neznajno = '?' in izdanie izdanie = izdanie.replace( '?','') i = izdanie godina = None sg = izdanie.rsplit('/',1) if len(sg)==2: i,g = (s.strip() for s in sg) if g: godina = g s = i.split('-') nositel = koi_nositel( i) izdatel = koi_izdatel( i) izd_kys = koi_izdatel( i, kys=True) pp = [ p.lower().strip('?') for p in (nositel, izdatel, izd_kys, r_izdateli.get( izdatel, izdatel) ) ] nn = [] for a in s: b = a.lower() if not b or b in pp: continue if b in nositeli or b in kysi_cyr.values(): continue appendif( nn, a) nomer = '-'.join( nn) godina2nomer = False if izdatel.lower()==balkanton and nomer and nositel in (ploca, ploca1, ploca2): nomer = nomer.upper() for l,c in zip( bukvi_lat, bukvi_cyr): nomer = nomer.replace( l,c) gkm = bton_nomer2godina( nomer) if gkm: god,kod,nom = gkm nomer = kod.upper()+str(nom) if not (godina or '').strip('?'): godina = god godina2nomer = True if nositeli.get( izdatel)== nositel: izdatel = nositel #ploca1/ploca2 return DictAttr( nositel=nositel, izdatel=izdatel, nomer=nomer, neznajno= neznajno, godina=godina, godina2nomer=godina2nomer)
optz.bool( 'obnovi') optz.bool( 'opis') optz.bool( 'premesti') optz.bool( 'izvadki') optz.bool( 'parcheta') optz.bool( 'log') optz.str( 'rubrika') optz,args = optz.get() obvivka.naistina = optz.zapis obvivka.log = optz.log #False if optz.izvadki or ospath.isfile( args[0] ): izvadki2zapis2dir2srez2opis( args[0]) else: for d in appendif( [], *args): #uniq assert ospath.isdir( d), d d = d.rstrip('/') fopis = d+'/opis' if not exists( fopis): continue print( d) with open( fopis) as f: opis = usability.load( f) ime = dai_ime( opis) print( ime) if optz.gotovo: gotovo( d, opis, kym= optz.gotovo, ime=ime) elif optz.obnovi: obnovi( d, opis) else:
def _init( klas): if info._inited: return info._inited = 1 info.stoinosti = stoinosti = DictAttr_lower() info.stoinosti_imena = dict() info.rstoinosti = dict_lower() def kxv2kvv( d, dict_v0_k_v1 =True): if isinstance( d, dict): for k,vv in d.items(): vv = vv.split() if dict_v0_k_v1: yield [vv[0],k]+vv[1:] else: yield [k] + vv else: #list for kvv in d: yield kvv.split() #TODO ioformat; обедини тези kxv2kvv с meta_prevodi и може би Abbr и prevodi ?? for kvv in kxv2kvv( klas.stoinosti0, dict_v0_k_v1= True): v0 = kvv[0].replace( '*','') k = kvv[1] for v in list(kvv): if '-' not in v: continue extendif( kvv, [v.replace('-',''), v.replace('-','_')]) kvv1 = [] for v in kvv: if '*' not in v: appendif( kvv1, v) continue l,r = v.split('*') extendif( kvv1, [ l+r[:i] for i in range( len(r)+1)] ) kvv = kvv1 for v in list(kvv): appendif( kvv, cyr2lat( v)) assert '*' not in k #lat assert '*' not in v0 #cyr for v in kvv: assert '*' not in v, v assert v not in stoinosti, v info.rstoinosti[ v] = k stoinosti[ v] = v0 info.stoinosti_imena[ v0] = kvv #prn( 111111111, stoinosti) klas.nasledimi = [ stoinosti[k] for k in klas.nasledimi ] klas.izvyn_etiketi = [ stoinosti[k] for k in klas.izvyn_etiketi ] klas.prevodachi = dict( (stoinosti[k],v) for k,v in klas.prevodachi.items()) zamestiteli_po_stoinost = DictAttr() for et,zam in klas.zamestiteli_po_stoinost.items(): if not callable( zam): rechnik = dict_lower() for kvv in kxv2kvv( zam, dict_v0_k_v1 =True): v0 = kvv[0] for v in kvv: rechnik[ v ] = v0 zam = rechnik etp = stoinosti.get( et,et) #.lat = .cyr = ... zamestiteli_po_stoinost[ et] = zamestiteli_po_stoinost[ etp] = zam if etp not in klas.prevodachi: klas.prevodachi[ etp] = zam klas.zamestiteli_po_stoinost = zamestiteli_po_stoinost