Python:在逗号之前用恒定数量的字符编写数字

问题描述 投票:0回答:1

我尝试从一些存储在公共目录中的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,但到目前为止再没有运气......)。

提前致谢 !

python format gif
1个回答
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']
© www.soinside.com 2019 - 2024. All rights reserved.