Python中%()s的含义是什么?

15

我在logging模块中看到了这样的代码%(asctime)s

%()s的意思是什么,它和%s有什么不同?

我只知道%s表示“字符串”,但我在网上找不到关于%()s的其他信息。


5
这是用于字符串格式化的语法,建议在互联网上查找更多信息。例如:https://pyformat.info/。 - Anandha
2个回答


8

%(asctime)s是日志记录模块用于获取'asctime' 属性的占位符,该属性属于LogRecord对象。

记法'%(key)s'用于标识映射中的键,并将其值插入格式化字符串中。例如,假设存在一个名为John的人,他身高168厘米,体重72公斤。

person = {'name': 'john', 'height': 168, 'weight': 72}

如果你想打印他们的名字和体重,你不需要为每个插入的实例指定参数,也不需要考虑体重是整数这一事实。你只需指定你想要的键(在%()s格式化字符串中),并在%之后提供存储这些项的映射即可。
>>> print('%(name)s, %(weight)s' % person)
john, 72

这种字符串格式化方法与str.format()相似:

>>> print('{name}, {weight}'.format(**person))
john, 72

2
我编辑了这个答案,因为有一堆术语和其他细节是错误的。首先,“%(asctime)s”是一个格式说明符,而不是一个Formatter对象,它本身并不进行转换,它所在的字符串才会进行转换。另外,文档链接指向了一个过时的版本。你可以查看修订历史记录来了解具体的更改内容。 - wjandrea
Taylr,由于你是新手,我想补充一下SO有点像维基百科,人们可以改进他人的内容,但作为作者,您始终可以[编辑]自己的帖子。您可以随意接受我的编辑,甚至可以撤销它们。对于背景知识,大多数编辑并不像这样激烈,但我不想只是给你打负分并告诉你你错了,因为你提出了一些好观点。 - wjandrea
2
@wjandrea 非常感谢你的修改!我很感激! - Taylr Cawte
我一直在寻找使用%()s格式化嵌套字典的方法,但无处可寻。有人知道是否可能吗?例如:test_dic = {'a': 1, 'b': {'c': 1}}。如果我想要使用嵌套字典中键c的值来格式化字符串,该怎么办?我尝试了类似于s_formatted = "Value of c is: %(b['c'])s % test_dic"的东西,但没有成功...谢谢! - benmaq
@benmaq 如果你一直在使用上面展示的字符串: s_formatted = "Value of c is: %(b['c'])s % test_dic" 那么你需要将 % test dic 移出字符串。结果应该是 s_formatted = "Value of c is: %(b['c'])s" % test_dic - Taylr Cawte
你的解决方案还是不起作用:/ 即使我从字符串中删除了 test_dic(这是我的错误) - benmaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接