Exemplo n.º 1
0
 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__)
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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)