我有一些包含一些字符串的字典,其中一个字符串中有两个反斜杠。我想用一个反斜杠替换它们。
这些是反斜杠: IfNotExist \\ u003dtrue
Configurations = {
"javax.jdo.option.ConnectionUserName": "test",
"javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
"javax.jdo.option.ConnectionPassword": "sxxxsasdsasad",
"javax.jdo.option.ConnectionURL": "jdbc:mysql://hive-metastore.cr.eu-west-1.rds.amazonaws.com:3306/hive?createDatabaseIfNotExist\\u003dtrue"
}
print (Configurations)
当我打印时,它会一直显示两个反斜杠。我知道逃避反斜杠的方法是使用\它在常规字符串中起作用,但它在字典中不起作用。
有什么想法吗?
答案 0 :(得分:3)
问题来自编码。
实际上\u003d
是=
的UNICODE表示。
反斜杠被另一个反斜杠转义,这是一件好事。
您可能需要:
将\u003d
替换为=
将其作为unicode读取,然后您应该在u
之前加上u"hi \\u003d"
字符串,可能没问题
答案 1 :(得分:1)
使用时打印字典
print (Configurations)
,它会打印出词典的 repr()值
你会得到
{'javax.jdo.option.ConnectionDriverName': 'org.mariadb.jdbc.Driver', 'javax.jdo.option.ConnectionUserName': 'test', 'javax.jdo.option.ConnectionPassword': 'sxxxsasdsasad', 'javax.jdo.option.ConnectionURL': 'jdbc:mysql://hive-metastore.cr.eu-west-1.rds.amazonaws.com:3306/hive?createDatabaseIfNotExist\\u003dtrue'}
你需要打印出你的字典
print (Configurations["javax.jdo.option.ConnectionURL"])
或
print (str(Configurations["javax.jdo.option.ConnectionURL"]))
注意: str()已添加
然后输出
jdbc:mysql://hive-metastore.cr.eu-west-1.rds.amazonaws.com:3306/hive?createDatabaseIfNotExist\u003dtrue
有关详情,请查看Python Documentation - Fancier Output Formatting
str()函数用于返回值的表示 是相当人类可读的,而repr()是要生成的 可由解释者阅读的表示(或将强制执行 如果没有等效语法,则为SyntaxError。
答案 2 :(得分:1)
打印字典会显示字典对象的表示形式。它并不一定能让你很好地展示它里面的一切。要做到这一点,你需要做:
for value in Configurations.values():
print(value)
答案 3 :(得分:0)
如果要使用单个反斜杠而不是双反斜杠来表示该字符串,则需要str()
表示,而不是repr()
。当您打印字典时,您始终会获得所包含字符串的repr()
。
您可以自行格式化字典来打印str()
,如下所示:
print ( "{" +
', '.join("'{key}': '{value}'".format(key=key, value=value)
for key, value in Configurations.items()) +
"}")
答案 4 :(得分:0)
根据您打印字符串的方式,Python将打印两个反斜杠,其中字符串实际上只有一个。这是Python指示反斜杠是实际反斜杠的方式,而不是转义字符的一部分;例如,因为打印实际上会显示回车符'\ n'。
尝试将字符串写入文件,然后在编辑器中打开文件。
(Linux的..)
> f = open('/tmp/somefile.txt', 'w')
> f.write(sometextwithbackslashes)
> \d
$ vi /tmp/somefile.txt