Python:如何将文件转换为自定义基数并返回?

时间:2018-05-16 09:57:51

标签: python python-3.x base

我有一个文件要转换为自定义基础(例如,基础86,自定义字母)

我尝试使用hexlify转换文件然后进入我的自定义基础,但它太慢了... 60 Ko的8秒..

def HexToBase(Hexa, AlphabetList, OccurList, threshold=10):
    number = int(Hexa,16) #base 16 vers base 10
    alphabet = GetAlphabet(AlphabetList, OccurList, threshold)
    #GetAlphabet return a list of all chars that occurs more than threshold times

    b_nbr = len(alphabet) #get the base
    out = ''
    while number > 0:
        out = alphabet[(number % b_nbr)] + out
        number = number // b_nbr
    return out

file = open("File.jpg","rb")
binary_data = file.read()
HexToBase(binascii.hexlify(binary_data),['a','b'],[23,54])

那么,有人能帮我找到合适的解决方案吗?

抱歉我的英语不好我是法国人,谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

首先你可以替换:

Namespace.CompareEntryIDs

人:

int(binascii.hexlify(binary_data), 16) # timeit: 14.349809918712538

其次,你可以使用int.from_bytes(binary_data, byteorder='little') # timeit: 3.3330371951720164 函数来加速循环:

divmod

对于out = "" while number > 0: number, m = divmod(number, b_nbr) out = alphabet[m] + out # timeit: 3.8345545611298126 vs 7.472579440019706 divmod比较和大数字,请参阅Is divmod() faster than using the % and // operators?

(注意:我希望buildind一个数组,然后用%, //创建一个字符串比"".join更快,但CPython 3.6的情况并非如此。)

所有东西放在一起给了我加速因子6。