当我有一个像"Hi \\x00"
这样的字符串时,当我尝试使用像
thatstring = thatstring.replace("\\x00",chr(0))
然后将其保存到文件
f = open("test.txt","r+")
f.seek(0)
f.write(thatstring)
f.truncate()
f.close()
并且在文件中它将显示为“Hi \ NULL”(NULL表示chr)
我认为问题是我在r +模式而不是br +写入文件所以它会在chr之前放一个\但我不能使用br +因为它必须用“字节格式”写入文件我的字符串必须包含字母和“特殊字符”。
我正在使用python 3.x
我该如何避免这种情况?
答案 0 :(得分:2)
文件中的文字是文字 \\x00
,所以两个反斜杠。然后,您的代码只替换一个的反斜杠:
>>> filecontents = r'Hi \\x00' # raw string literal to disable escape sequences
>>> list(filecontents.partition(' ')[-1]) # only the part after the space
['\\', '\\', 'x', '0', '0']
>>> filecontents.replace("\\x00", chr(0))
'Hi \\\x00'
>>> list(_.partition(' ')[-1]) # last result, everything after the space
['\\', '\x00']
文件内容不受Python字符串文字转义扩展的限制,因此无需在此处转义转义。
替换两个反斜杠或仅在文件中使用一个反斜杠。使用另一个原始字符串文字最简单地替换两者:
thatstring = thatstring.replace(r"\\x00", chr(0))