最干净和pythonic的方式,在循环中连接数字和字符串,同时保持零前缀



假设我想从网站下载文件,文件按此样式列出

www.website.com/file001.mp3
www.website.com/file002.mp3
www.website.com/file003.mp3
.
.
.
www.website.com/file451.mp3
www.website.com/file452.mp3
www.website.com/file453.mp3

我想制作一些代码,使用循环下载这些内容。

for i in range(1, 454):
downloadFunction('www.website.com/file00'+i+'.mp3')

当 i 大于 9 时,这将不起作用,因为这样串联看起来像

'www.website.com/file0010.mp3' 

而不是

'www.website.com/file010.mp3' 

我可以为每个百分之一的值编写大小写代码,但我有一种感觉,有一种更优雅的方法来编码它。

使用 a 格式字符串,您可以执行以下操作:

url_template = 'www.website.com/file{:03}.mp3'
for i in range(9, 12):
print(url_template.format(i))

输出:

www.website.com/file009.mp3
www.website.com/file010.mp3
www.website.com/file011.mp3

因此,对于您的应用:

url_template = 'www.website.com/file{:03}.mp3'
for i in range(1, 454):
downloadFunction(url_template.format(i))

您可以使用zfill,这是一个用前导零填充字符串的字符串函数。在您的情况下:

for i in range(1, 454):
downloadFunction('www.website.com/file{}.mp3'.format(str(i).zfill(3)))

你可以做downloadFunction('www.website.com/file%03d.mp3' % i)%是占位符,d是数字格式说明符。03告诉 Python 最多填充三个字符。

使用:

for i in range(1, 454):
downloadFunction('www.website.com/file'+str(i).rjust(3,'0')+'.mp3')

相反。

最新更新