我尝试从一些存储在公共目录中的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,009,009,011,012等。即,我想用相同数量的字符(这里是3)来写数字t。因为这个t的范围可以从1到任意大的整数,所以我宁愿避免在我的代码中添加一些内容来检测写入t所需的字符数,然后添加剩余的0。此外,我确信有一种非常简单的方法可以按照我想要的方式编写t,即使我还没想到它(我也没有在其他地方找到有用的东西)。
如果还有人有另一种方法来正确地对我的图表进行排序,那么他或她将非常受欢迎(我已经尝试过使用创建文件的日期,因为t小于t'意味着t.png已经创造了BEFORE 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']