def printTabfile(self): for item in self.data: (word, defi) = item[:2] defi = defi.replace('\n', '\\n') try: print(word + '\t' + defi) except: myRaise(__file__)
def writeTxt(self, sep, filename='', writeInfo=True, rplList=[], ext='.txt', head=''): if not filename: filename = self.filename + ext txt = head if writeInfo: for t in self.info: #?????????????????????????? inf = t[1] for rpl in rplList: inf = inf.replace(rpl[0], rpl[1]) txt += ('##' + t[0] + sep[0] + inf + sep[1]) #inf = self.getInfo(t[0]) #if inf!='': # try: # txt+=('##' + t[0] + sep[0] + inf + sep[1]) # except: # myRaise(__file__) # printAsError('Error on writing info line for "%s"'%t[0]) for item in self.data: (word, defi) = item[:2] if word.startswith('#'): continue if self.getPref('enable_alts', True): try: alts = item[2]['alts'] except: pass else: if alts: word = '|'.join([word] + alts) for rpl in rplList: defi = defi.replace(rpl[0], rpl[1]) try: line = word + sep[0] + defi + sep[1] txt += line except: myRaise(__file__) printAsError('Error on writing line for word "%s"' % word) continue if filename == None: return txt with open(filename, 'wb') as fp: fp.write(txt) return True
def writeTxt(self, sep, filename='', writeInfo=True, rplList=[], ext='.txt', head=''): if not filename: filename = self.filename + ext txt = head if writeInfo: for t in self.info: #?????????????????????????? inf = t[1] for rpl in rplList: inf = inf.replace(rpl[0], rpl[1]) txt += ('##' + t[0] + sep[0] + inf + sep[1]) #inf = self.getInfo(t[0]) #if inf!='': # try: # txt+=('##' + t[0] + sep[0] + inf + sep[1]) # except: # myRaise(__file__) # printAsError('Error on writing info line for "%s"'%t[0]) for item in self.data: (word, defi) = item[:2] if word.startswith('#'): continue if self.getPref('enable_alts', True): try: alts = item[2]['alts'] except: pass else: if alts: word = '|'.join([word] + alts) for rpl in rplList: defi = defi.replace(rpl[0], rpl[1]) try: line = word + sep[0] + defi + sep[1] txt += line except: myRaise(__file__) printAsError('Error on writing line for word "%s"'%word) continue if filename==None: return txt with open(filename, 'wb') as fp: fp.write(txt) return True
def reverseDic(self, wordsArg=None, opt={}): opt = addDefaultOptions(opt, { 'matchWord': True, 'showRel': 'None', 'includeDefs': False, 'background': False, 'reportStep': 300, 'autoSaveStep': 1000, ## set this to zero to disable auto saving. 'savePath': '', }) self.stoped = False ui = self.ui try: c = self.continueFrom except AttributeError: c = 0 savePath = opt['savePath'] if c == -1: print('c=%s'%c) return elif c==0: saveFile = open(savePath, 'wb') ui.progressStart() ui.progress(0.0, 'Starting...') elif c>0: saveFile = open(savePath, 'ab') if wordsArg is None: words = self.takeOutputWords() elif isinstance(wordsArg, file): words = wordsArg.read().split('\n') elif isinstance(wordsArg, (list, tuple)): words = wordsArg[:] elif isinstance(wordsArg, basestring): words = open(wordsArg).read().split('\n') else: raise TypeError('Argumant wordsArg to function reverseDic is not valid!') autoSaveStep = opt['autoSaveStep'] if not opt['savePath']: opt['savePath'] = self.getInfo('name')+'.txt' revG = Glossary(self.info[:]) revG.setInfo('name', self.getInfo('name')+'_reversed') revG.setInfo('inputlang' , self.getInfo('outputlang')) revG.setInfo('outputlang', self.getInfo('inputlang')) wNum = len(words) #steps = opt['reportStep'] #div = 0 #mod = 0 #total = int(wNum/steps) ''' if c==0: print('Number of input words:', wNum) print('Reversing glossary...') else: print('continue reversing from index %d ...'%c) ''' t0 = time.time() if not ui: print('passed ratio\ttime:\tpassed\tremain\ttotal\tprocess') n = len(words) for i in xrange(c, n): word = words[i] rat = float(i+1)/n ui.progress(rat, '%d / %d words completed'%(i,n)) if ui.reverseStop: saveFile.close() ## if with KeyboardInterrupt it will be closed ?????????????? self.continueFrom = i self.stoped = True #thread.exit_thread() return else: self.i = i ''' if mod == steps: mod = 0 ; div += 1 t = time.time() dt = t-t0 tRem = (total-div)*dt/div ## (n-i)*dt/n rat = float(i)/n if ui: ############# FIXME #ui.progressbar.set_text( '%d/%d words completed (%%%2f) remaining %d seconds'%(i,n,rat*100,tRem) ) ui.progressbar.update(rat) while gtk.events_pending(): gtk.main_iteration_do(False) else: print('%4d / %4d\t%8s\t%8s\t%8s\t%s'%( div, total, timeHMS(dt), timeHMS(tRem), timeHMS(dt + tRem), sys.argv[0], )) else: mod += 1 ''' if autoSaveStep>0 and i%autoSaveStep==0 and i>0: saveFile.close() saveFile = open(savePath, 'ab') result = self.searchWordInDef(word, opt) if len(result)>0: try: if opt['includeDefs']: defi = '\\n\\n'.join(result) else: defi = ', '.join(result) + '.' except: open('result', 'wb').write(str(result)) myRaise(__file__) return False if autoSaveStep>0: saveFile.write('%s\t%s\n'%(word, defi)) else: revG.data.append((word, defi)) if autoSaveStep>0 and i==n-1: saveFile.close() if autoSaveStep==0: revG.writeTabfile(opt['savePath']) ui.r_finished() ui.progressEnd() return True
def write(self, filename, format='', **options): if not filename: printAsError('Invalid filename %r'%filename) return False ext = '' (filename_nox, fext) = splitext(filename) fext = fext.lower() if fext in ('.gz', '.bz2', '.zip'): zipExt = fext filename = filename_nox fext = splitext(filename)[1].lower() else: zipExt = '' del filename_nox if format: try: ext = Glossary.formatsExt[format][0] except KeyError: myRaise() format = '' ## ????? if not format: items = Glossary.formatsExt.items() for (fmt, extList) in items: for e in extList: if format==e[1:] or format==e: format = fmt ext = e break if format: break if not format: for (fmt, extList) in items: if filename==fmt: format = filename ext = extList[0] filename = self.filename + ext break for e in extList: if filename==e[1:] or filename==e: format = fmt ext = e filename = self.filename + ext break if format: break if not format: for (fmt, extList) in items: if fext in extList: format = fmt ext = fext if not format: printAsError('Unable to detect write format!') return False if isdir(filename): #filename = join(filename, split(self.filename)[1]+ext) filename = join(filename, self.filename+ext) validOptionKeys = self.formatsWriteOptions[format] for key in options.keys(): if not key in validOptionKeys: printAsError('Invalid write option "%s" given for %s format'%(key, format)) del options[key] print 'filename=%s'%filename getattr(self, 'write%s'%format).__call__(filename, **options) if zipExt: try: os.remove('%s%s'%(filename, zipExt)) except OSError: pass if zipExt=='.gz': (output, error) = subprocess.Popen( ['gzip', filename], stdout=subprocess.PIPE, ).communicate() if error: printAsError('%s\nfail to compress file "%s"'%(error, filename)) elif zipExt=='.bz2': (output, error) = subprocess.Popen( ['bzip2', filename], stdout=subprocess.PIPE, ).communicate() if error: printAsError('%s\nfail to compress file "%s"'%(error, filename)) elif zipExt=='.zip': (dirn, name) = split(filename) initCwd = os.getcwd() os.chdir(dirn) (output, error) = subprocess.Popen( ['zip', filename+'.zip', name, '-m'], stdout=subprocess.PIPE, ).communicate() if error: printAsError('%s\nfail to compress file "%s"'%(error, filename)) os.chdir(initCwd)