आप string.Formatter()
class उपयोग कर सकते हैं एक स्ट्रिंग में फ़ील्ड पार्स करने के लिए, Formatter.parse()
method साथ:
from string import Formatter
fieldnames = [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
डेमो:
>>> from string import Formatter
>>> yourstring = "path/to/{self.category}/{self.name}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['self.category', 'self.name']
>>> yourstring = "non-keyword {keyword1} {{escaped brackets}} {} {keyword2}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['keyword1', 'keyword2']
आप उन फ़ील्ड नामों को और आगे पार्स कर सकते हैं; इसके लिए आप str._formatter_field_name_split()
विधि (पायथन 2)/_string.formatter_field_name_split()
फ़ंक्शन (पायथन 3) का उपयोग कर सकते हैं (यह आंतरिक कार्यान्वयन विवरण अन्यथा खुलासा नहीं है; Formatter.get_field()
इसे आंतरिक रूप से उपयोग करता है)। यह फ़ंक्शन नाम का पहला भाग देता है, जिसे str.format()
पर दिए गए तर्कों में देखा जाएगा, साथ ही शेष फ़ील्ड के लिए जेनरेटर भी होगा।
जनरेटर (is_attribute, name)
tuples पैदा करता है; is_attribute
सच अगर अगले नाम एक विशेषता के रूप में इलाज किया जा रहा है, गलत है अगर यह obj[name]
के साथ देखने के लिए एक आइटम है:
try:
# Python 3
from _string import formatter_field_name_split
except ImportError:
formatter_field_name_split = str._formatter_field_name_split
from string import Formatter
field_references = {formatter_field_name_split(fname)[0]
for _, fname, _, _ in Formatter().parse(yourstring) if fname}
डेमो:
>>> from string import Formatter
>>> from _string import formatter_field_name_split
>>> yourstring = "path/to/{self.category}/{self.name}"
>>> {formatter_field_name_split(fname)[0]
... for _, fname, _, _ in Formatter().parse(yourstring) if fname}
{'self'}
को ध्यान में रखें इस समारोह है कि Formatter()
वर्ग के आंतरिक कार्यान्वयन विवरण का हिस्सा और बिना किसी सूचना के पाइथन से बदला या हटाया जा सकता है, और अन्य पायथन कार्यान्वयन में भी उपलब्ध नहीं हो सकता है।
मुझे लगता है कि आप प्रारूप का उपयोग नहीं करना चाहते हैं? – user189
@ user189 I ** ** ' का उपयोग करेगा .format (** kwargs)'। मेरा सवाल है कि 'kwargs' शब्दकोश स्वचालित रूप से बनाने के बारे में है। –