python 3-此类型的字符串存在问题->“ss:seconds:3\x01”
我认为\x01作为字符串的一部分会被忽略,但我猜不会。我如何解决,以便按预期打印和使用?一串 谢谢python 3-此类型的字符串存在问题->“ss:seconds:3\x01”,python,python-3.x,Python,Python 3.x,我认为\x01作为字符串的一部分会被忽略,但我猜不会。我如何解决,以便按预期打印和使用?一串 谢谢 key_hash = {} key_hash["ss:seconds:3\x01"] = "topic-1" key_hash["ss:seconds:3\x02"] = "topic-2" key_hash["ss:seconds:3\x03"] = "topic-3" key
key_hash = {}
key_hash["ss:seconds:3\x01"] = "topic-1"
key_hash["ss:seconds:3\x02"] = "topic-2"
key_hash["ss:seconds:3\x03"] = "topic-3"
key_hash["ss:seconds:3\x04"] = "topic-4"
for key,topic in key_hash.items():
print(key,topic)
以下是输出:
ss:seconds:3 topic-1
ss:seconds:3 topic-2
ss:seconds:3 topic-3
ss:seconds:3 topic-4
但是我想要
ss:seconds:3\x01 topic-1
它们不会被忽略,但终端会将所有4个控制字符显示为零宽度图示符。在我的终端上,hexdump输出中的控制字符强调: $python3 tmp.py 学生:秒:3主题-1 学生:秒:3主题2 学生:秒:3主题-3 学生:秒:3主题-4 $python3 tmp.py | hextump-C 00000000 73 73 3a 73 65 63 6f 6e 64 73 3a 33 01 20 74 6f | ss:秒数:3。到| 000000 10 70 69 63 2d 31 0a 73 73 3a 73 65 63 6f 6e 64 73 | pic-1。ss:秒| 000000 20 3a 33 02 20 74 6f 70 69 63 2d 32 0a 73 3a 73 |:3。专题2.学生:s| 000000 30 65 63 6f 6e 64 73 3a 33 03 20 74 6f 70 69 63 2d |秒:3。话题-| 000000 40 33 0a 73 73 3a 73 65 63 6f 6e 64 73 3a 33 04 20 | 3。ss:秒数:3| 000000 50 74 6f 70 69 63 2d 34 0a |主题4|
00000058它们不会被忽略,但您的终端会将所有4个控制字符显示为零宽度图示符。在我的终端上,hexdump输出中的控制字符强调: $python3 tmp.py 学生:秒:3主题-1 学生:秒:3主题2 学生:秒:3主题-3 学生:秒:3主题-4 $python3 tmp.py | hextump-C 00000000 73 73 3a 73 65 63 6f 6e 64 73 3a 33 01 20 74 6f | ss:秒数:3。到| 000000 10 70 69 63 2d 31 0a 73 73 3a 73 65 63 6f 6e 64 73 | pic-1。ss:秒| 000000 20 3a 33 02 20 74 6f 70 69 63 2d 32 0a 73 3a 73 |:3。专题2.学生:s| 000000 30 65 63 6f 6e 64 73 3a 33 03 20 74 6f 70 69 63 2d |秒:3。话题-| 000000 40 33 0a 73 73 3a 73 65 63 6f 6e 64 73 3a 33 04 20 | 3。ss:秒数:3| 000000 50 74 6f 70 69 63 2d 34 0a |主题4|
00000058如果我是对的,您可以使用原始字符串
key_hash = {}
key_hash[r"ss:seconds:3\x01"] = "topic-1"
key_hash[r"ss:seconds:3\x02"] = "topic-2"
key_hash[r"ss:seconds:3\x03"] = "topic-3"
key_hash[r"ss:seconds:3\x04"] = "topic-4"
for key,topic in key_hash.items():
print(key,topic)
我得到的输出是
ss:seconds:3\x01 topic-1
ss:seconds:3\x02 topic-2
ss:seconds:3\x03 topic-3
ss:seconds:3\x04 topic-4
如果我是对的,你可以使用原始字符串
key_hash = {}
key_hash[r"ss:seconds:3\x01"] = "topic-1"
key_hash[r"ss:seconds:3\x02"] = "topic-2"
key_hash[r"ss:seconds:3\x03"] = "topic-3"
key_hash[r"ss:seconds:3\x04"] = "topic-4"
for key,topic in key_hash.items():
print(key,topic)
我得到的输出是
ss:seconds:3\x01 topic-1
ss:seconds:3\x02 topic-2
ss:seconds:3\x03 topic-3
ss:seconds:3\x04 topic-4
遇到的问题是,文本中包含一个无法打印的十六进制字母:\x01是一个字母,请参见上的f.e 当您检查字符串长度时可以看到:
text = "ss:seconds:3\x01"
print('+' + text + '+') # on my console: +ss:seconds:3+
print(text, len(text))
1234567890123
ss:seconds:3* 13 # * is the non printable character \x01
您可以人为更改字符串,以包含所有不可打印字符的十六进制表示形式,如下所示:
from string import printable
def change_non_printables(text):
p = set(printable)
return ''.join((t if t in p else fr"\x{ord(t):02x}" for t in text))
modified = change_non_printables(text)
print(modified)
要输出:
ss:seconds:3\x01
然后,您可以将其用作您的dict中的键。遇到的问题是,您的文本包含一个无法打印的十六进制字母:\x01是一个字母,请参阅上的f.e 当您检查字符串长度时可以看到:
text = "ss:seconds:3\x01"
print('+' + text + '+') # on my console: +ss:seconds:3+
print(text, len(text))
1234567890123
ss:seconds:3* 13 # * is the non printable character \x01
您可以人为更改字符串,以包含所有不可打印字符的十六进制表示形式,如下所示:
from string import printable
def change_non_printables(text):
p = set(printable)
return ''.join((t if t in p else fr"\x{ord(t):02x}" for t in text))
modified = change_non_printables(text)
print(modified)
要输出:
ss:seconds:3\x01
然后可以将其用作dict中的键。我不知道这里有什么问题…我不知道这里有什么问题…代码块中的强调太微妙了。我之前禁用语法突出显示时遇到了问题;现在看起来好多了。我也添加了斜体,但遗憾的是,没有办法指定不同的颜色。代码块中的强调太微妙了。我之前禁用语法突出显示时遇到了问题;现在看起来好多了。我也添加了斜体,但遗憾的是,没有办法指定不同的颜色。您应该更改格式字符串,使其输出十六进制。@Mark我尝试使用fr\x{ordt:x},但这并没有在前面添加0,我将不得不进行其他花招来实现这一点,所以我选择了ord valueTry fr\x{ordt:02x}的整数格式。这对我来说几乎不像是恶作剧。@马克可以发誓我试过了-f.e的输出。\x0e现在更有意义了:ty。你应该更改格式字符串,使其输出十六进制。@Mark我试过使用fr\x{ordt:x}但这并没有在前面添加0,我必须做其他的花招来实现这一点,所以我选择了ord valueTry fr\x{ordt:02x}的整数格式。这对我来说几乎不像是恶作剧。@Mark可以发誓我试过了——f.e.\x0e的输出现在变得更有意义了:ty。