From 5417379283a099ebd29a0ee09c2db4e1d2e9effc Mon Sep 17 00:00:00 2001 From: Alfred Okedi Date: Thu, 7 Apr 2022 18:44:55 +0300 Subject: [PATCH 1/2] impl unmillify --- millify/__init__.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/millify/__init__.py b/millify/__init__.py index ed58dfa..22fc085 100644 --- a/millify/__init__.py +++ b/millify/__init__.py @@ -13,6 +13,23 @@ def remove_exponent(d): return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize() +def unmillify(number): + search = re.search('(\d+\.)?(\d+)(\w)', number) + groups = search.groups() + millvalues = {'':1e0,'k':1e3,'M':1e6,'B':1e9,'T':1e12,'P':1e15,'E':1e18,'Z':1e21,'Y':1e24} + groups = list(groups) + if groups[0] == None: groups[0] = '0' + + try: + millname = groups[-1] + millvalue = millvalues[millname] + value = float(''.join(groups[:-1])) + number = int(value * millvalue) + except: + pass#millvalue = number + return number + + def millify(n, precision=0, drop_nulls=True, prefixes=[]): """Humanize number.""" millnames = ['', 'k', 'M', 'B', 'T', 'P', 'E', 'Z', 'Y'] From fd1d121ef3c58141f397d4977d9c8fbdf15cd90e Mon Sep 17 00:00:00 2001 From: Alfred Okedi Date: Fri, 8 Apr 2022 20:58:57 +0300 Subject: [PATCH 2/2] update unmillify and README --- README.md | 13 +++++++++++++ millify/__init__.py | 12 +++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f9279b4..80203c7 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,20 @@ prefixes = ['kB', 'MB', 'GB'] millify(10000, prefixes=prefixes) # '10kB' ``` +### Convert from human readable number(millified) to number +```python +from millify import unmillify + +unmillify("10k") +# '10000' + +unmillify("5M") +# '5000000' +prefixes = ['kB', 'MB', 'GB'] +unmillify("5kB", prefixes=prefixes) +# '5000' +``` ### Add a thousands separator diff --git a/millify/__init__.py b/millify/__init__.py index 22fc085..5fe0aca 100644 --- a/millify/__init__.py +++ b/millify/__init__.py @@ -13,13 +13,19 @@ def remove_exponent(d): return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize() -def unmillify(number): +def unmillify(number, prefixes=[]): + millnames = ['', 'k', 'M', 'B', 'T', 'P', 'E', 'Z', 'Y'] + if prefixes: + millnames = [''] + millnames.extend(prefixes) search = re.search('(\d+\.)?(\d+)(\w)', number) groups = search.groups() - millvalues = {'':1e0,'k':1e3,'M':1e6,'B':1e9,'T':1e12,'P':1e15,'E':1e18,'Z':1e21,'Y':1e24} + millvalues = {} + print(millnames) + for i in range(len(millnames)): + millvalues[millnames[i]] = 1000**i groups = list(groups) if groups[0] == None: groups[0] = '0' - try: millname = groups[-1] millvalue = millvalues[millname]