代码之家  ›  专栏  ›  技术社区  ›  user2823667

python正在读取文件,该文件在python中包含\x0a as \n not as \\x0a

  •  0
  • user2823667  · 技术社区  · 10 年前

    我有一个包含十六进制字符\x0a的xml文件。我想将它们转换为适当的unicode字符,如python中的。

    每当我试图读取文件时,它都会转义反斜杠字符。

    例如,我的文件内容是

    get EtqLt5fwmRBE\x0a
    

    然后在读取文件后,字符串的表示形式为

    get EtqLt5fwmRBE\\x0a
    

    但我想要的是改变 \x0a \n

    没有 \x0a个 在文件中。还有其他角色。例如,其中一个 repr() 文件中第行的是

    \\x7c12\\x7c5\\x7c\\x0a
    

    上述预期输出为

    |12|5|
    
    1 回复  |  直到 10 年前
        1
  •  8
  •   Martijn Pieters    10 年前

    您可以通过 string_escape (仅限Python 2,生成字节字符串)或 unicode_escape (Python 2和3生成unicode字符串)编解码器。

    如何应用它们取决于您的Python版本(2或3)以及输入是否为字节字符串( str 在Python 2中, bytes Python 3)或Unicode字符串( unicode 在Python 2中, 字符串 在Python 3中)。

    Python 2,如果您有一个字节字符串 unicode字符串,只需调用 decode() :

    fixed = yourstring.decode('unicode_escape')
    

    在Python 3中,使用 bytestring.decode(...) 如果你有字节。如果你有 字符串 ,首先编码为拉丁语-1(作为 unicode场景(_E) 将使用它来解码任何非ASCII码点!):

    fixed = yourstring.encode('latin1').decode('unicode_escape')
    

    Python 2演示:

    >>> '\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape')
    u'|12|5|\n'
    >>> u'\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape')
    u'|12|5|\n'
    

    在Python 3中:

    >>> b'\\x7c12\\x7c5\\x7c\\x0a'.decode('unicode_escape')
    '|12|5|\n'
    >>> '\\x7c12\\x7c5\\x7c\\x0a'.encode('latin1').decode('unicode_escape')
    '|12|5|\n'