1. 対象データの先頭に0が続く場合、0以外になるまでそのバイトを除外(e.g. 最初の3バイトが全て0の場合は、先頭の3バイトを除外)
2. 1の結果を58で割る
3. 剰余をBase58に変換
4. 変換された剰余を連結し、1で除外した0の数だけ先頭に1を連結
import sys
import re
matrix = list('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz')
pattern=r"^(00)*"
for line in sys.stdin:
target = line.rstrip('\n')
match = re.match(pattern, target)
zeros=match.group()
target = target.lstrip(zeros)
q = int(target, 16)
r = 0
b58str = ''
while q > 0:
q, r = divmod(q, 58)
b58str = matrix[r] + b58str
print(zeros.replace('00', '1') + b58str)
$ echo 0001ab | python3 base58encode.py
18N