在Python中将十进制数组转换为ASCII表示形式的正确方法是什么?我有很多这样的行:99104101101115101
如果我手动将这些数字分隔到'99 104 101 101 115 101'
,那么它会给'cheese'
。源数据集没有空格,没有分隔符。 假设数据仅包含a-z A-Z 0-9 中的字符。
答案 0 :(得分:3)
>>> import re
>>> re.sub('1?..', lambda m: chr(int(m.group())), '99104101101115101')
'cheese'
使用随机字符串百万printable ASCII characters进行演示:
>>> 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
答案 1 :(得分:1)
可打印的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'