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']
我尝试从存储在公共目录中的一些 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']