python译码器
将纯数字译码为Excel列坐标的字母索引表示形式(特殊的二十六进制)
李俊才
邮箱:291148484@163.com
【内容概述】
译码在一定程度上相当于查字典。对于简单的编码,可以通过穷举法将一种字符编码与另外一种字符编码进行对应,只要将对应的字符以一定的形式返回即可。
本文介绍一种在不断试验中进行译码的方法。简而言之,就是先通过“测试法”,获得译码完成后字母的位数,再由高往低逐位通过“测试法”获得该位的值。
【代码实现】
def num_to_Letter(num): bit = 1 i = 1 a = 0 x = int(num) - 26**(bit-i) Letter = '' if x < 0: raise ValueError('error:列坐标索引的数值表示必须为一个正整数') if num - 26**(bit-i) == 0: return 'A' x = num while x >= 0: if x == 0: a = 1 #标志位置1,表示由全A构成 x = x - 26**(bit - i) i = i-1 if a == 1: for k in range(abs(i)): Letter = Letter + 'A' return Letter Num_of_letters = abs(i) D = {1:'A',2:'B',3:'C',4:'D',5:'E',6:'F',7:'G',8:'H', 9:'I',10:'J',11:'K',12:'L',13:'M',14:'N',15:'O',16:'P', 17:'Q',18:'R',19:'S',20:'T',21:'U',22:'V',23:'W',24:'X', 25:'Y',26:'Z',} alist = [] #从最高位开始逐个确定字母 for k in range(Num_of_letters+1): if k != 0: alist = [k] + alist #print('alist:',alist) n = num for k in alist: # k 为从高位向低位的第k个字母 i = k j = 1 # 用于得到 j X (26)的i次方的数字k,再将k由数字映射为字母 while (n - j*(26**(i-1))) > 0: j = j + 1 j = j - 1 n = n - j*(26**(i-1)) u = j if k == 1: u = u+1 Letter = Letter + D.get(u) return Letter
【小结】
在Excel报表自动化实践中,该方法是很常用的。
代码供大家参考,转载请指明出处。