>>> 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‘,它将无法工作。
请建议
发布于 2017-05-24 05:34:32
您可以也应该使用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))))binascii.unhexlify:unhexlify('abcdef') # '\xab\xcd\xef'的示例用法
在您的示例中,十六进制数字存储在list中,因此您应该首先使用str.join连接这些数字。并简单地将其传递给binascii.unhexlify。
发布于 2017-05-24 05:37:24
在字符串域中,您不能轻松地做到这一点。幸运的是,使用chr和int很简单
>>> 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', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ']发布于 2017-05-24 05:40:50
提供了一个替代hallazzang的答案:我们可以使用literal_eval将unicode的字符串表示形式安全地转换为unicode字符。例如,'\\xde'的计算结果是“instance”。
>>>from ast import literal_eval
>>>
>>>[ast.literal_eval("'\\x{}'".format(k)) for k in n]
['Þ', 'Û', 'ª', 'Ü', '¾', '\xad', 'Ú', '§', 'Ë', 'Ì', 'í', '×', 'Ê', 'Ú', 'Û', 'ª', '½', 'Û', '}', '\xad', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ']我指出,literal_eval是eval的一个安全的替代方案。eval允许运行任意代码,而literal_eval只创建文本--比如int、string、list和dicts。
https://stackoverflow.com/questions/44149700
复制相似问题