我想用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
有人知道怎么做吗?
答案 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'))