如何从字节对象中删除双反斜杠?

时间:2016-08-04 09:39:23

标签: python byte backslash

例如, t = str.encode(msg)

打印(t)的 我得到了双斜线。

B'\\ XDA \\ XAD \\ X94 \\ XB4 \\ x0bg \\ X92] R \\ x9a1y \\ x9d \\固定的\\ X04 \\ XD5 \\ x8e + \\ X07 \\ XF8 \ \ X03 \\ x1bm \\ XD6 \\ X96 X10 \\ \\ xca80 \\ xe26 \\ x8a

我想将结果作为

B'\ XDA \ XAD \ X94 \ XB4 \ x0bg \ X92] r \ x9a1y \ x9d \固定的\ X04 \ XD5 \ x8e + \ X07 \ XF8 \ X03 \ x1bm \ XD6 \ X96 \ X10 \ xca80 \ xe26 \ x8a'

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

你不能那样做因为     '\\' 代表斜线,而不是双斜线。 例如,如果您将msg转换为字符串并使用print函数打印msg,您将只看到一个斜杠。

答案 1 :(得分:1)

有不同的编码选项可以帮助您获得所需的内容。 下面我编码和解码以获得所需的结果:

from codecs import encode

# I have the string shortened for presentation
your_string = "\\xda\\xad\\x94"

encode(your_string.encode().decode('unicode_escape'),"raw_unicode_escape")

现在,如果你有一个未转义的字符串,那就更好了:

from codecs import encode

your_string = "\xda\xad\x94"

encode(your_string, "raw_unicode_escape")

这两者都产生一个字节值:

b'\xda\xad\x94'

我发现可以使用其他编码而不是'raw_unicode_escape',但我认为最好使用它。

有关编码的详细信息,请参阅:https://docs.python.org/2.4/lib/standard-encodings.html

答案 2 :(得分:1)

在Python 3.6中,您可以使用

data_bytes, _ = codecs.escape_decode(data, 'hex')` part of `import codecs

图书馆。在您的情况下,datamsg变量。

如果打印data_bytes的值,则将以字节为单位获取值

答案 3 :(得分:0)

我想把它作为对Adrian Gherasims答案的评论,但它太长了所以我把它作为一个单独的“答案”。

对于普通符号,您可以使用replace - 函数

In [1]: temp = 'aa1aa2aa3aa4aa5'
In [2]: temp
Out[2]: 'aa1aa2aa3aa4aa5'
In [3]: temp.replace('aa', 'a')
Out[3]: 'a1a2a3a4a5'

但是,如果您尝试对双斜杠执行相同操作,则会出现语法错误

In [4]: temp2 = '\\1\\2\\3\\4'
In [5]: temp2
Out[5]: '\\1\\2\\3\\4'
In [6]: temp2.replace('\\', '\')

File "<ipython-input-6-3973ee057a3e>", line 1
temp2.replace('\\', '\')
                       ^
SyntaxError: EOL while scanning string literal