Python:在逗号前用恒定字符数写数字

时间:2019-04-14 08:42:08

标签: python format gif

我尝试从存放在公共目录中的一些png文件(我自己创建)创建gif文件(命名为name)。我从终端使用的命令如下:

转换-delay 2 -loop 0 * .png -scale 960x520 name.gif

以上命令将按字典顺序使用所有png文件(这是命令的“ * .png”部分),但是我的问题是我无法以一种好的方式对文件进行排序。我的所有文件都表示某个时间t的函数图,因此我将这些文件命名为“ t.png”,其中t的范围是1到100。因此,例如,“。png”之后是“文件1.png”,因为“。”在“ 0”之后,依此类推。

一种解决方法是,以相同的格式写出从1到100的每个数字t,例如:001、002、003、004、005、006、007、008、009、010、011、012等。 即,我想使用相同数量的字符(此处为3)来写数字t。由于此t的范围可以从1到任意大的整数,所以我宁愿避免在代码中添加一些东西,该东西可以检测写入t所需的字符数,然后再加上其余的0。此外,我坚信,即使我仍无法弄清楚(也没有在其他地方找到有用的东西),我仍然可以按照自己的意愿编写t的一种非常简单的方法。

如果有人还有其他方法可以对我的图进行正确排序,那么他或她将非常受欢迎(例如,我尝试使用创建文件的日期,因为t小于t'表示t。 png是在t'.png之前创建的,但是到目前为止,仍然没有运气...)。

谢谢!

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决此问题。首先,可以按照您的建议,在文件名中添加前导零。您可以通过格式化数字来做到这一点,就像这样:

>>> t = 32
>>> f"{t:03d}.png"
'032.png'

请注意格式字符串的f前缀。那很重要。不用管它,这将会发生:

>>> "{t:03d}.png"
'{t:03d}.png'

如果解释器抱怨f,则说明您使用的是Python 3.6或更早版本,而您需要这样做:

>>> "{0:03d}.png".format(t)
'032.png'

另一种方法是像以前一样创建文件名,然后通过在key中指定排序规则将它们按所需顺序排序:

>>> filelist = ["1.png","2.png","10.png","100.png"]
>>> sorted(filelist, key=lambda f: int(f.partition(".")[0]))
['1.png', '2.png', '10.png', '100.png']

不仅仅是采用默认的排序顺序:

>>> sorted(filelist)
['1.png', '10.png', '100.png', '2.png']