为什么双反斜杠在python词典中不起作用

时间:2020-07-31 09:56:17

标签: python dictionary python-3.7

我有一个python字典,其中包含如下连接详细信息:

x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': 'my\\password'
    }
}

我希望PWD的值为my\password,但我却得到my\\password

作为字符串,即

pwd = 'my\\password'
# returns my\password

所以我尝试了此操作(但仍然无法正常工作):

pwd = 'my\\password'
x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': pwd
    }
}

还尝试了四个反斜杠\\\\,仅尝试了一个反斜杠\(出错),尝试将r放在字符串值的前面,并将它们组合在一起,仍然没有。

基本上希望字典的输出显示/保持/指向my\password而不是my\\password

2 个答案:

答案 0 :(得分:3)

这个“问题”实质上取决于您如何在代码中调用'PWD'的值。简单地打印整个字典将不会处理反斜杠,r字符串或用于转义反斜杠字符的任何操作。这就是为什么在调用整个字典时会得到2个反斜杠的原因。 注意-即使将其设置为r字符串也不会更改此设置,因为r字符串会经过并在每个反斜杠后面添加一个额外的反斜杠以自动转义它。

但是,当您专门将其称为x['myserver']['PWD']时,该字符串中的转义符将被处理,因为它被作为单个字符串进行调用,处理和处理,并且所有字符串中的转义符将被处理。

总而言之,如果您调用整个字典,甚至调用嵌套的内部字典,则将不处理字符串,因此\\会出现在您想要的\处。 要获取输出my\password,请专门调用该值,例如x['myserver']['PWD']

答案 1 :(得分:2)

您如何验证它不起作用? 使用打印功能,您可以看到它完全符合您的期望:

x = {
  'myserver' : {
    'DSN': 'servername',
    'DATABASE': 'mydatabase',
    'UID': 'myusername',
  'PWD': 'my\\password'
    }
}

print(x)

print(x['myserver']['PWD'])

输出:

{'myserver': {'DSN': 'servername', 'DATABASE': 'mydatabase', 'UID': 'myusername', 'PWD': 'my\\password'}}

my\password