需要帮助添加转义序列到列表中的所有元素,稍后用于unicode

问题描述:

>>> n 
['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7', 'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD', 'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC', 'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE'] 

我有一个像上面这样的列表。我想在每个元素前添加转义字符'\ x'。我可以做追加为“\ X”但后来我想加入的元素,以创建Unicode字符,如果我用“\ X”,它不工作需要帮助添加转义序列到列表中的所有元素,稍后用于unicode

请建议

+1

显示所需输出的示例,并通过包含错误消息来解释“不工作”的含义。 – DyZ

可以和应该使用binascii.unhexlify。的binascii.unhexlify

from binascii import unhexlify 

n = ['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7', 
    'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD', 
    'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC', 
    'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE'] 

print(repr(unhexlify(''.join(n)))) 

用法示例:unhexlify('abcdef') # '\xab\xcd\xef'

在你的情况,十六进制数字存储在list,所以你应该串连那些首先使用str.join。只需将它传递给binascii.unhexlify即可。

你不能在字符串域中轻松地做到这一点。幸运的是,简单的只是用chrint

>>> n = ['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7', 'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD', 'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC', 'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE'] 
>>> [chr(int(k, 16)) for k in n] 
['Þ', 'Û', 'ª', 'Ü', '¾', '\xad', 'Ú', '§', 'Ë', 'Ì', 'í', '×', 'Ê', 'Ú', 'Û', 'ª', '½', 'Û', '}', '\xad', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ'] 

提供给hallazzang的答案一种替代方案:我们可以用literal_eval安全地打开的unicode字符串表示成Unicode字符。例如,'\\xde'评估为'Þ'。

>>>from ast import literal_eval 
>>> 
>>>[ast.literal_eval("'\\x{}'".format(k)) for k in n] 
['Þ', 'Û', 'ª', 'Ü', '¾', '\xad', 'Ú', '§', 'Ë', 'Ì', 'í', '×', 'Ê', 'Ú', 'Û', 'ª', '½', 'Û', '}', '\xad', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ'] 

我想指出,literal_evaleval一个安全的替代品。 eval允许运行任意代码,而literal_eval只创建字面值,字符串,列表和字符串等文字。