将十进制数字转换为ascii



在Python中将一组十进制数字转换为ASCII表示的正确方法是什么?我有一堆这样的行,99104101101115101,如果我手工把这些数字分开到'99 104 101 101 115 101',就会得到'cheese'。源数据集没有空格,没有分隔符。假设数据只包含a-z a-z 0-9中的字符。

>>> import re
>>> re.sub('1?..', lambda m: chr(int(m.group())), '99104101101115101')
'cheese'

演示一个包含一百万个可打印ASCII字符的随机字符串:

>>> import random
>>> original = ''.join(chr(random.randrange(32, 127)) for _ in range(1000000))
>>> len(original), original[:50]
(1000000, 'Ty-@u8ZJnh=`/Z*s,\+@T PgZ/CE"Nq\wXvqvDn`&)~BmP$n;f')
>>> encoded = ''.join(str(ord(c)) for c in original)
>>> len(encoded), encoded[:50]
(2284738, '84121456411756907411010461964790421154492436484328')
>>> decoded = re.sub('1?..', lambda m: chr(int(m.group())), encoded)
>>> decoded == original
True

可打印的ascii范围是32到126。因此:

>>> s = '99104101101115101'
>>> s2 = re.sub('3[2-9]|[4-9][0-9]|1[0-1][0-9]|12[0-6]', r' g<0>', s)
>>> s2
' 99 104 101 101 115 101'
>>> ''.join(chr(int(x)) for x in s2.split())
'cheese'

最新更新