[英]Additional \ appearing in front of newline character(\n) when print Python dictionary
我有這個 Python 代碼:
# # RSA Key
print('Enter the RSA key: ')
keyphrase = []
while True:
line = input()
if line:
keyphrase.append(line)
else:
break
rsa_key = repr('\n'.join(keyphrase)).replace("'", "")
rsa_key = rsa_key + '\\n'
print(f'rsa_key: {rsa_key}')
output['key']['value'] = rsa_key
print(f"rsa_key_from_dict: {output['key']['value']}")
print(f"full_dict: {output}")
output 如下(請注意,我只包含了每個打印語句中 output 的片段):
rsa_key: -----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAwfR7zzPpS3U6O4iCOdcTSKkYXq8Qa6Fs4WbWNQcGOYb1gBw5\nmPfnDq
rsa_key_from_dict: -----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAwfR7zzPpS3U6O4iCOdcTSKkYXq8Qa6Fs4WbWNQcGOYb1gBw5\nmPfnDq
full_dict: {'key': {'type': 'pulsar-athenz', 'additional_parameters': {'pulsar_athenz': {}}, 'id': 'fef', 'value': '-----BEGIN RSA PRIVATE KEY-----\\nMIIEpQIBAAKCAQEAwfR7zzPpS3U6O4iCOdcTSKkYXq8Qa6Fs4WbWNQcGOYb1gBw5\\nmPfnDq
您會看到,對於rsa_key
和rsa_key_from_dict
在n
之前只有一個\
,表示換行符\n
但在full_dict
中插入了一個額外的\
給出\\n
。
為什么會出現這個額外的\
以及如何防止它?
這是repr
和str
之間的細微差別。
代表(object )
返回包含 object 的可打印表示的字符串。 對於許多類型,此 function 嘗試返回一個字符串,當傳遞給 eval() [...]
https://docs.python.org/3.8/library/functions.html#repr
跟進您'\\n'
示例。
>>> print('\\n')
\n
>>> print(repr('\\n'))
'\\n'
默認情況下,傳遞給str.format
的變量將使用str
格式化。 您可以通過使用!r
為變量名添加后綴來使用repr
對其進行格式化。
print(f'rsa_key: {rsa_key!r}')
字典的字符串表示使用repr
來格式化它們的值。 這就是為什么您在打印字典時會看到雙反斜杠的原因。
我認為您混淆了數據和表示(請參閱repr
)。 字符串'\n'
表示換行符,而字符串'\\n'
表示反斜杠\
然后是字母n
。 反斜杠是一個轉義字符,這就是為什么它在表示自己時需要加倍。
您會看到
rsa_key
和rsa_key_from_dict
在n
之前只有一個\
,表示換行符
這里\n
不代表換行符,它實際上是一個反斜杠,然后是一個字母n
但在
full_dict
中插入了一個額外的\
給出\\n
。
在這里你看到了表示, '\\n'
例子:
>>> print('\n') # newline
>>> print('\\n') # backslash, n
\n
>>> print(repr('\\n')) # representation of backslash, n
'\\n'
考慮下面的這本字典 object。
dict = {
'a':"\\nSomeValue",
'b':"\nSomeNewValue"
}
現在直接打印字典 print(dict) 將打印這個。
{'a': '\\nSomeValue', 'b': '\nSomeNewValue'}
並分別打印值如下圖
for key , value in dict.items():
print(value)
它會打印這個。
\nSomeValue
SomeNewValue
這是因為“\n”字符與轉義序列一起添加到鍵“a”的字符串中,因此它按原樣添加並且是該字符串值的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.