使用 Python3.x 中的格式在一个字符串中打印列表、字符串和字典
Printing list, strings and dict within one string using format in Python3.x
我希望将查询数据库所需的字符串格式化如下:
SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10
以下内容来自字典:
field1
、field2
measurement
node
和 name1
10
字典如下:
conf = {
'fields': ['field1', 'field2'],
'measurement': 'measurement',
'limit': 10,
'tags': {'node': 'name1'}
}
我能够将字符串的一部分格式化为字符串(没有 tags
),如下所示:
QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 LIMIT {}'.format(
'","'.join(conf['fields'],
conf['measurement'],
conf['limit'])
这为我提供了:
SELECT "field1", "field2" FROM measurement WHERE "status"=0 LIMIT 10
问题
tags
中的键值对在许多情况下是 动态的 即没有以前已知的 key
(在本例中 node
)
对于字符串:
QUERY = 'SELECT {} FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}
我希望动态填充字符串格式 AND "{}"=\'{}\'
(事先不知道 tags
中的键值对
如何实现?
我不确定是否:
QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}'.format(
'","'.join(conf['fields']),
conf['measurement'],
**conf['tags'],
conf['limit']
)
工作,因为它抛出以下 SyntaxError
:
SyntaxError: positional argument follows keyword argument unpacking
我事先使用字典 conf['tags']
创建了格式化字符串,以便更容易应用于 QUERY
conf = {
'fields': ['field1', 'field2'],
'measurement': 'measurement',
'limit': 10,
'tags': {'node': 'name1'}
}
#Create the string using dictionary
dict_str = ''.join('"{}"=\'{}\''.format(key,value) for key, value in conf['tags'].items())
#Create the final format string
QUERY = 'SELECT "{}" FROM "{}" WHERE "status"=0 AND {} LIMIT {}'.format(
'","'.join(conf['fields']),
conf['measurement'],
dict_str,
conf['limit']
)
print(QUERY)
输出将是
SELECT "field1","field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10
如果您使用的是 python 3.6 及更高版本,则可以使用 here (python docs) 指定的 f-strings 进行字符串格式化的新方法。我不确定我是否理解您的要求,但我认为您的意思是这样的:
key = list(conf['tags'].keys())[0]
QUERY = f"""SELECT {conf['fields'][0]}, {conf['fields'][1]} FROM "{conf['measurement']}" WHERE "status"=0 AND "{key}"='{conf['tags'][key]}' LIMIT {conf['limit']}"""
结果是这个字符串:
SELECT "field1", "field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10
我希望将查询数据库所需的字符串格式化如下:
SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10
以下内容来自字典:
field1
、field2
measurement
node
和name1
10
字典如下:
conf = {
'fields': ['field1', 'field2'],
'measurement': 'measurement',
'limit': 10,
'tags': {'node': 'name1'}
}
我能够将字符串的一部分格式化为字符串(没有 tags
),如下所示:
QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 LIMIT {}'.format(
'","'.join(conf['fields'],
conf['measurement'],
conf['limit'])
这为我提供了:
SELECT "field1", "field2" FROM measurement WHERE "status"=0 LIMIT 10
问题
tags
中的键值对在许多情况下是 动态的 即没有以前已知的 key
(在本例中 node
)
对于字符串:
QUERY = 'SELECT {} FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}
我希望动态填充字符串格式 AND "{}"=\'{}\'
(事先不知道 tags
如何实现?
我不确定是否:
QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}'.format(
'","'.join(conf['fields']),
conf['measurement'],
**conf['tags'],
conf['limit']
)
工作,因为它抛出以下 SyntaxError
:
SyntaxError: positional argument follows keyword argument unpacking
我事先使用字典 conf['tags']
创建了格式化字符串,以便更容易应用于 QUERY
conf = {
'fields': ['field1', 'field2'],
'measurement': 'measurement',
'limit': 10,
'tags': {'node': 'name1'}
}
#Create the string using dictionary
dict_str = ''.join('"{}"=\'{}\''.format(key,value) for key, value in conf['tags'].items())
#Create the final format string
QUERY = 'SELECT "{}" FROM "{}" WHERE "status"=0 AND {} LIMIT {}'.format(
'","'.join(conf['fields']),
conf['measurement'],
dict_str,
conf['limit']
)
print(QUERY)
输出将是
SELECT "field1","field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10
如果您使用的是 python 3.6 及更高版本,则可以使用 here (python docs) 指定的 f-strings 进行字符串格式化的新方法。我不确定我是否理解您的要求,但我认为您的意思是这样的:
key = list(conf['tags'].keys())[0]
QUERY = f"""SELECT {conf['fields'][0]}, {conf['fields'][1]} FROM "{conf['measurement']}" WHERE "status"=0 AND "{key}"='{conf['tags'][key]}' LIMIT {conf['limit']}"""
结果是这个字符串:
SELECT "field1", "field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10