使用字符串和(填充)数字格式化字符串

时间:2018-01-06 02:04:26

标签: python string-formatting

我正在为http请求汇总网址

baseurl = 'http://..'
action = 'mef'
funcId = 100
year = 2018
month = 1

url = '{}?action={}&functionId={}&yearMonth={}{}'.format(baseurl, action, funcId, year, month)

我的烦恼是,如果小于10,我需要用0填充月份数。 我知道如何填充数字,如果它是格式化的唯一变量:

'{0:02d}'.format(month)  # returns: 01

虽然我在尝试这个时:

'{}?action={}&functionId={}&yearMonth={}{0:02d}'.format(baseurl, action, funcId, year, month)

导致错误:

ValueError: cannot switch from automatic field numbering to manual field specification

我认为它是因为其他括号没有显示出期望的变量类型,但我无法弄清楚用什么字符来指定字符串。

2 个答案:

答案 0 :(得分:4)

{0:02d}更改为{:02d}

冒号前面的零表示使用format的第一个参数(在您的示例中为baseurl)。错误消息告诉您它无法从自动填充字段切换到通过索引执行此操作。您可以在Format String Syntax

的文档中阅读有关此主题的更多信息

答案 1 :(得分:3)

这个应该有效

url = '{}?action={}&functionId={}&yearMonth={}{num:02d}'.format(baseurl, action, funcId, year, num=month)

https://www.python.org/dev/peps/pep-3101/