Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3-此类型的字符串存在问题->“ss:seconds:3\x01”_Python_Python 3.x - Fatal编程技术网

python 3-此类型的字符串存在问题->“ss:seconds:3\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

我认为\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

它们不会被忽略,但终端会将所有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。