用Python的转义序列格式化字符串

2024-04-25 01:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

为了澄清起见,我重新编写了附加信息。在

考虑以下因素:

y = hex(1200)
y
'0x4b0'

我需要用“\”替换y的前0,使其看起来像“\x04b0”。我正在通过RS-232串行与一个仪器通信,它严格按照该格式('\xSumCharsHere')获取参数。Python不允许我执行以下操作。在

^{pr2}$

以下是不可接受的,因为它在分配给z的实际值中仍然有'\\'

z = '\\' + y[1:]
z
'\\x4b0'

最终目标是向串行端口发送如下命令:

s.write(z) # s is a serial object
s.write('\x04b0') # This call is an equivalent of the call above
s.write('\\x04b0') # This command will not work

Tags: 信息参数is格式callthis仪器write
3条回答

最后一个代码位是正确的,也可以使用原始字符串编写:

y = r'\x' + x[2: len(x)]

正如cdhowie在回答中所说:

When you type the name of a variable in the Python console, Python prints the string's representation as Python code. This code does in fact work, the representation of the result is just throwing you off.

不过,这是手工编写转义序列的一种替代方法,我认为这是一种更好的编码方法,因为它更具可读性。在

你的最后一段代码并不像你想象的那样:

>>> x = hex(1200)
>>> y = '\\' + x[1: len(x)]
>>> y
'\\x4b0'
>>> print y
\x4b0

在Python控制台中输入变量名时,Python将字符串的表示形式打印为Python code,这就是为什么会看到两个反斜杠——Python字符串中的文本反斜杠被另一个前导反斜杠转义。这段代码实际上起作用了,结果的表示只是把你甩了。在

不过,我建议您改用这段代码,因为您的代码省略了前导的零:

^{pr2}$

后者将起作用。在控制台中,Python使用repr()来打印对象,在本例中,对象将显示双斜杠。在控制台中执行print y,您将看到它正确地输出。在

您还可以稍微清理一下您的第一个示例:

y = "\\x" + x[2:]

或者第二个:

^{pr2}$

相关问题 更多 >