python 3对此类型的字符串有问题>“ss:seconds:3\x01”

2024-05-15 01:22:41 发布

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

我认为字符串中的“\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_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

Tags: key字符串infortopicitemshashss
3条回答

您遇到的问题是,文本包含一个无法打印的十六进制字母:\x01是一个字母(请参见ascii-code.com上的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

然后你可以用它作为你口述的关键

它们不会被忽略,但终端会将所有4个控制字符显示为零宽度图示符。在我的终端上(强调hexdump输出中的控制字符):

$ python3 tmp.py
ss:seconds:3 topic-1
ss:seconds:3 topic-2
ss:seconds:3 topic-3
ss:seconds:3 topic-4
$ python3 tmp.py | hexdump -C
00000000  73 73 3a 73 65 63 6f 6e  64 73 3a 33 01 20 74 6f  |ss:seconds:3. to|
00000010  70 69 63 2d 31 0a 73 73  3a 73 65 63 6f 6e 64 73  |pic-1.ss:seconds|
00000020  3a 33 02 20 74 6f 70 69  63 2d 32 0a 73 73 3a 73  |:3. topic-2.ss:s|
00000030  65 63 6f 6e 64 73 3a 33  03 20 74 6f 70 69 63 2d  |econds:3. topic-|
00000040  33 0a 73 73 3a 73 65 63  6f 6e 64 73 3a 33 04 20  |3.ss:seconds:3. |
00000050  74 6f 70 69 63 2d 34 0a                           |topic-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

相关问题 更多 >

    热门问题