如何解决如何从Python格式字符串中提取关键字?
您可以使用string.Formatter()
类的一个字符串,解析出的领域,与Formatter.parse()
方法:
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()
方法(Python
2)/_string.formatter_field_name_split()
函数(Python
3)(此内部实现细节未公开;Formatter.get_field()
在内部使用)。此函数返回名称的第一部分 ,将在传递给的参数中查找该名称的 第一部分str.format()
,并为该字段的其余部分生成一个生成器。
生成器产生(is_attribute,
name)
元组;is_attribute
如果将姓氏视为属性,则为true;如果要使用以下项查找,则为false 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()
该类的内部实现细节的一部分,可以在不通知的情况下从Python进行更改或删除,甚至在其他Python实现中也不可用。
解决方法
我想在API中提供自动字符串格式,例如:
my_api("path/to/{self.category}/{self.name}",...)
可以替换为格式化字符串中标注的属性值。
如何从Python格式字符串中提取关键字参数:
"non-keyword {keyword1} {{escaped brackets}} {} {keyword2}" => 'keyword1','keyword2'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。