簡體   English   中英

打印 Python 字典時,在換行符 (\n) 前面出現附加 \

[英]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_keyrsa_key_from_dictn之前只有一個\ ,表示換行符\n但在full_dict中插入了一個額外的\給出\\n

為什么會出現這個額外的\以及如何防止它?

這是reprstr之間的細微差別。

代表(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_keyrsa_key_from_dictn之前只有一個\ ,表示換行符

這里\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM