为什么我不能逃脱特殊性格

时间:2013-10-12 15:22:11

标签: python

我的代码是

hexviewer.py:

def hex_viewer(filename):
    data = open(filename,"rb").read()
    listofhex = map(lambda x: b"%02X" % ord(x),data)
    listofchar = map(lambda x: "%s" % x,data)
    print "\n".join(["{0}\t{1}".format(" ".join(listofhex[x:x+10])," ".join(listofchar[x:x+10])  ) for x in xrange(0,len(listofhex),10)]  )
hex_viewer("hexviewer.txt")

和我的源文件

hexviewer.txt:

hello 
world

输出我觉得应该是

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   \r \n w o
72 6C 64                        r l d

但输出

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   

 w o
72 6C 64    r l d

我做错了什么?

编辑 对不起,我尝试编辑我的代码

listofchar = map(lambda x: "%s" % x,data)

这里

listofchar = map(lambda x: repr(r"%s") % x,data)

但是输出是`

68 65 6C 6C 6F 20 0D 0A 77 6F   'h' 'e' 'l' 'l' 'o' ' ' '
' '
' 'w' 'o'
72 6C 64    'r' 'l' 'd'

我试试

import re
listofchar = map(lambda x: re.escape(r"%s") % x,data)

输出

68 65 6C 6C 6F 20 0D 0A 77 6F   \h \e \l \l \o \  \
\
\w \o
72 6C 64    \r \l \d

我试试

listofchar = map(lambda x: r"%s".replace("\\","\\\\") % x,data)

输出

68 65 6C 6C 6F 20 0D 0A 77 6F   h e l l o   

 w o
72 6C 64    r l d

和许多方式,但我忘记了

对不起T ^ T

1 个答案:

答案 0 :(得分:0)

您需要的是一种单独保留普通字符但只编码特殊字符的方法。

listofchar = map(lambda x: x.encode('unicode-escape'), data)

请注意,您可以使用列表推导而不是map,这是首选方法。

listofchar = [x.encode('unicode-escape') for x in data]