是否可以使用Python的str.format(key=value)
語法來替換特定的鍵。如何轉義格式字符串?
考慮這個例子:
my_string = 'Hello {name}, my name is {my_name}!'
my_string = my_string.format(name='minerz029')
返回
KeyError: 'my_name'
有沒有辦法來實現這一目標?
是否可以使用Python的str.format(key=value)
語法來替換特定的鍵。如何轉義格式字符串?
考慮這個例子:
my_string = 'Hello {name}, my name is {my_name}!'
my_string = my_string.format(name='minerz029')
返回
KeyError: 'my_name'
有沒有辦法來實現這一目標?
一個簡單的解決辦法,我使用了一下:
my_string = 'Hello {name}, my name is {my_name}!'
to_replace = {
"search_for" : "replace_with",
"name" : "minerz029",
}
for search_str in to_replace:
my_string = my_string.replace('{' + search_str + '}', to_replace[search_str])
print(my_string)
這可以很容易地在to_replace
字典多個鍵擴大和不會抱怨,即使搜索字符串不存在。它可能會改進,以提供更多的.format()
的功能,但它對我來說已經足夠了。
您可以使用雙大括號,這樣
>>> my_string = 'Hello {name}, my name is {{my_name}}!'
>>> my_string.format(name='minerz029')
'Hello minerz029, my name is {my_name}!'
正如你所看到的,一旦格式化後,外{}
被刪除,{{my_name}}
成爲{my_name}
逃脫my_name
。如果以後要格式化my_name
,你可以簡單地重新格式化,這樣
>>> my_string = 'Hello {name}, my name is {{my_name}}!'
>>> my_string = my_string.format(name='minerz029')
>>> my_string
'Hello minerz029, my name is {my_name}!'
>>> my_string.format(my_name='minerz029')
'Hello minerz029, my name is minerz029!'
Python3.2 +具有format_map
它可以讓你做到這一點
>>> class D(dict):
... def __missing__(self, k):return '{'+k+'}'
...
>>> my_string = 'Hello {name}, my name is {my_name}!'
>>> my_string.format_map(D(name='minerz029'))
'Hello minerz029, my name is {my_name}!'
>>> _.format_map(D(my_name='minerz029'))
'Hello minerz029, my name is minerz029!'
現在是沒有必要添加額外的{}
,只有你提供D
各鍵將被取代
由於@steveha指出,如果你是在一箇舊Python3,你仍然可以使用
my_string.format(**D(name='minerz029'))
我剛測試過這個,你不需要使用'str.format_map(d)';你可以使用'str.format(** d)',它工作得很好。但是'.format_map()'更高效,因爲它不需要複製字典。 – steveha
@steveha,在Python2中仍將其轉換爲'dict',但它對Python3正常工作 –
正確...我在Python3中進行了測試。 Python2沒有'.format_map()'。我的意思是,在具有'.format_map()'的Python版本中,您實際上可以使用'str.format(** d)',而且它也可以工作。對不起,沒有拼寫出來。 – steveha
但我稍後需要'.format()''my_name'。 – minerz029