Python : 在逗号前写有固定字符数的数字

Python : writing numbers with constant number of characters before the comma

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

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

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

解决它的方法是用相同的格式写下从 1 到 100 的每个数字 t,例如:001, 002, 003, 004, 005, 006, 007, 008, 009, 010, 011, 012 , ETC。 也就是说,我想用相同数量的字符(这里是 3 个)来写数字 t。因为这个 t 的范围可以从 1 到任意大的整数,所以我宁愿避免在我的代码中添加一些东西来检测写入 t 所需的字符数,然后添加剩余的 0。此外,我相信有一种非常简单的方法可以按照我的意愿编写 t ,即使我还没有弄明白(我也没有在其他地方找到有用的东西)。

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

提前致谢!

有两种方法可以解决这个问题。首先,您可以按照您的建议在文件名中放置前导零。您可以通过格式化数字来做到这一点,如下所示:

>>> 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']