以前にPHPとJavascriptで書いた62進数プログラムを各種言語でライブラリ化しておこうと思って、今回はpythonでコーディングしておきました。
WEBエンジニアをやっていると、データ容量を一文字でも減らしたい時があります。
膨大なログデータは、レコードの文字数が少ないほどメンテナンススピードもアップするものです。
データ圧縮技術を使ってもいいんですが、数値データを62進数にする事で、かなりの恩恵が得られます。
ちなみに、日付と時間フォーマットをこの方法で圧縮すると1/2ぐらいのインパクトがあるので、使わない手はありません。
そんな便利なコードをいろんな言語に移植しておくことは、今後のためになるので、気になる人は使ってみてください。
ソースコード
※実行テストも兼ねたソースコードになっているので、ライブラリとして使いたい場合は、上部のみでお使いください。
#coding: utf-8
# 文字列62個
decimal62_char = "0123456789";
decimal62_char += "abcdefghijklmnopqrstuvwxyz";
decimal62_char += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
def decimal62_encode(num):
str = []
cn = len(decimal62_char)
while num != 0:
a1 = int(num / cn);
a2 = num - (a1 * cn);
s = decimal62_char[a2]
str.insert(0,s)
num = a1
res = "".join(str);
return res;
def decimal62_decode(str16):
chrs = {};
cn = len(decimal62_char)
for i in range(0 , cn):
chrs[decimal62_char[i]] = i
num = 0
for i in range(0 , len(str16)):
s = str16[(i+1)*-1]
p = pow(cn , i)
num += chrs[s] * p
return num
print "encode : ",decimal62_encode(20180425231245)
print "decode : ",decimal62_decode("5JhPVGod")
実行テスト
$ python /var/www/html/labo/python/decimal16.py
> encode : 5JhPVGod
> decode : 20180425231245
プログラムをそのまま実行すると、encodeして同じ値をデコードするようにしています。
きちんと、元に戻っているので、成功ですね。
多言語対応
0 件のコメント:
コメントを投稿