如何在Python中使用替换双反斜杠对字节字符串使用单反斜杠

时间:2018-07-06 12:27:57

标签: python byte

我想用Python将字节串的双反斜杠替换为单反斜杠。

例如, 有一个字节字符串。

word = b'Z\xa6\x97\x86j2\x08q\\r\xca\xe6m'

我需要这个字节字符串。

word = b'Z\xa6\x97\x86j2\x08q\r\xca\xe6m'

如果我使用replace如:

word = word.replace(b"\\",b"\")

我收到此错误。

File "test.py", line 79
word = word.replace(b"\\", b"\")
                               ^
SyntaxError: EOL while scanning string literal

有人知道怎么做吗?

3 个答案:

答案 0 :(得分:5)

\\不是双反斜杠,而是一个转义符。看:

print b'Z\xa6\x97\x86j2\x08q\\r\xca\xe6m'
# Z���jq\r��m

\r(从您期望的输出中)不是2个字符,而是一个:

print b'Z\xa6\x97\x86j2\x08q\r\xca\xe6m'
# ��m�jq

(在将其打印到终端时,carriage return \r会阻止我们看到第一个字母Z

如果您确实希望将'\\r'替换为'\r',则可以执行以下操作:

print repr(word.replace('\\r', '\r'))
# 'Z\xa6\x97\x86j2\x08q\r\xca\xe6m'
print word.replace('\\r', '\r')
# ��m�jq

或者,如果您要替换所有escape sequences。 Python2版本:

print repr(b'1\\t2\\n3'.decode('string_escape'))
# '1\t2\n3'
print b'1\\t2\\n3'.decode('string_escape')
# 1 2
# 3

Python3版本:

print(repr(b'1\\t2\\n3'.decode('unicode_escape')))
# '1\t2\n3'
print(b'1\\t2\\n3'.decode('unicode_escape'))
# 1 2
# 3

答案 1 :(得分:1)

您的\r是回车符。因此\\r\加上回车符。在字符串中找不到\\

“有效”是用CR代替反斜杠+ CR:

word = b'Z\xa6\x97\x86j2\x08q\\r\xca\xe6m'

print(word.replace(b"\\r",b"\r"))

结果:

b'Z\xa6\x97\x86j2\x08q\r\xca\xe6m'

但是我不确定这从一开始就是您的意思(也就是说:在您的字节字符串中插入一个回车符)

答案 2 :(得分:0)

您有一个字节流。 您需要转义'\'并解码字节。

word = b'Z\xa6\x97\x86j2\x08q\\r\xca\xe6m'
new_word = (str(word).encode('utf-8'))
print(new_word.replace(b"\\\\",b"\\").decode('ascii'))