aiee

Python modules for common command line interfacing utils
git clone git://git.defalsify.org/aiee.git
Log | Files | Refs | LICENSE

numbers.py (995B)


      1 # standard imports
      2 import re
      3 import logging
      4 
      5 logg = logging.getLogger(__name__)
      6 
      7 
      8 re_number_postfix = r'^(\d+(\.\d+)?)(([kmgtpezyE])(-?\d+)?)?$'
      9 def postfix_to_int(s):
     10     s = s.replace(' ', '')
     11     m = re.match(re_number_postfix, s)
     12     if not m:
     13         raise ValueError('invalid postfix expansion value: {}'.format(s))
     14     v = 0
     15     d = 0
     16     p = 0
     17     if m[2] == None:
     18         v = int(m[1])
     19     else:
     20         (n, f) = m[1].split('.')
     21         if int(f) == 0:
     22             v = int(n)
     23         else:
     24             p -= len(f)
     25             v = int(n + f)
     26 
     27     if m[4] == 'k':
     28         p += 3
     29     elif m[4] == 'm':
     30         p += 6
     31     elif m[4] == 'g':
     32         p += 9
     33     elif m[4] == 't':
     34         p += 12
     35     elif m[4] == 'p':
     36         p += 15
     37     elif m[4] == 'e':
     38         p += 18
     39     elif m[4] == 'z':
     40         p += 21
     41     elif m[4] == 'y':
     42         p += 24
     43     elif m[4] == 'E':
     44         p += int(m[5])
     45 
     46     r = int(v * (10 ** p))
     47     logg.debug('number {} translated to {}'.format(s, r))
     48 
     49     return r