代码之家  ›  专栏  ›  技术社区  ›  Adam Noack

如何将转义字符串转换为相应单个字符的列表?

  •  1
  • Adam Noack  · 技术社区  · 7 年前

    我有ASCII字符字符串,如下所示:

    '\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05>\\xaa\\xaa\\x04\\x80\\x02\\xf8\\x00\\x85\\xaa\\xaa\\x04\\x80\\x02\\xf8'
    

    我想将这些字符串转换为列表,其中列表的每个元素都是ASCII字符,字符的顺序和值与原始字符串保持一致:

    ['\xaa', '\xaa', '\x02', '\xba', '\x04', 'A', '\xaa', '\xaa', '\x02', '\xbc', '\x05', '>', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8', '\x00', '\x85', '\xaa', '\xaa', '\x04', '\x80', '\x02', '\xf8']
    

    如果每个角色都在形式上,这就不会太难了 \xa0 (表示十六进制字节),但有时ASCII转义字符,如 \n 换行符和 \\ 包括反斜杠。这抛弃了我写的转换器方法。

    是否有一个简单的内置函数可以满足我的需求?或者我可以下载一些软件包吗?还是有人有一个简单的代码解决方案?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Zero Piraeus    7 年前

    看起来有一个字符串包含另一个字符串的Python表示。解码的一种方法是使用 codecs.decode() 使用 unicode_escape encoding :

    >>> s = '\\xaa\\xaa\\x02\\xba\\x04A\\xaa\\xaa\\x02\\xbc\\x05 ... \\x02\\xf8'
    >>> import codecs
    >>> t = codecs.decode(s, 'unicode_escape')
    >>> t
    'ªª\x02º\x04Aªª\x02¼\x05 ... \x02ø'
    

    请注意,虽然可打印的非ASCII字符在此处按原样表示,而不是按原样表示 \xNN 逃逸,它们与那些逃逸完全相同:

    >>> 'ª' is '\xaa'
    True
    

    一旦你得到你的解码字符串 t ,将其转换为列表非常简单:

    >>> list(t)
    ['ª', 'ª', '\x02', 'º', '\x04', 'A', 'ª', 'ª', '\x02', '¼', '\x05', ..., '\x02', 'ø']
    

    然而: 我忍不住想知道为什么你首先需要解码这个字符串。在很多情况下,通过 repr(some_string) 周围,所以你有可能 XY Problem . 您应该考虑首先不生成这些repr字符串是否更有意义。