如何在Python中将字节字符串中的双反斜杠替换为单个反斜杠

4
我希望你能为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

有人知道怎么做吗?


1
使用word = word.replace(b"\\", b"\") - vishal
它不起作用,我得到了相同的字符串。 - Atsushi Sakai
b'Z\xa6\x97\x86j2\x08q\r\xca\xe6m' 在 r 前只有一个斜杠。打印它并查看。由于 \ 是特殊字符,因此使用 \ 进行转义。 - vishal
如果我使用 word = word.replace(b"\r", b"\r"),我得到的是 word = b'Z\xa6\x97\x86j2\x08q\r\xca\xe6m'。我想从“//”替换为“/”。 - Atsushi Sakai
3个回答

7

\\ 不是双斜杠,而是一个被转义的斜杠。看这个例子:

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

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

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

当在终端打印时,回车符\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

或者,如果您想替换所有的 转义序列。 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

如果我想将所有转义字符如 \r、\n、\Z 等替换为 \r、\n、\Z ...,我该怎么做? - Atsushi Sakai
@AtsushiSakai 我更新了我的答案。 - Eugene Primako
我遇到了一个错误... print(repr('1\t2\n3'.decode('string_escape'))) AttributeError: 'str'对象没有'decode'属性 - Atsushi Sakai
另外,它不是字节,字符串。我需要字节的版本。 - Atsushi Sakai
@AtsushiSakai 您是正确的,Python2和Python3的语法在这里有所不同。再次更新。 - Eugene Primako

1

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

“有效”的方法是用回车符替换反斜杠加回车符:

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'

但我不确定这是否是您最初的意思(即在字节字符串中插入回车符)。


我想要将所有的转义字符如 \r、\n、\Z 等替换为 \r、\n、\Z ...。 - Atsushi Sakai

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'))

你能解码为utf-8并检查结果吗? word = word.replace(b"\\",b"\").decode("utf-8") - sjaymj62
我遇到了一个错误:UnicodeDecodeError: 'utf-8' 编解码器无法解码第1个位置的0xa6字节:起始字节无效。 - Atsushi Sakai
我希望我的新编辑能解决你的问题。我尝试过了,对我有效。 - sjaymj62

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接