python - Python:在逗号前写入具有恒定字符数的数字
问题描述
我尝试从存放在公共目录中的一些 png 文档(我自己创建的)构建一个 gif 文件(命名为 say name)。我从终端使用的命令如下:
转换 -delay 2 -loop 0 *.png -scale 960x520 name.gif
上面的命令将按字典顺序使用所有 png 文件(这是命令的“* .png”部分),但我的问题是我无法以好的方式对文件进行排序。我所有的文件都代表某个时间 t 的函数图,所以我将这些文件命名为“t.png”,其中 t 的范围是 1 到 100,比如说;例如,“文件 1.png”出现在“10.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 之前创建,但到目前为止还没有运气......)。
提前致谢 !
解决方案
有两种方法可以解决这个问题。首先,您可以按照您的建议在文件名中添加前导零。您可以通过格式化数字来做到这一点,如下所示:
>>> 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']
推荐阅读
- javascript - Vue:按住键盘修饰符时如何更改按钮的文本?
- angular - 如何修复错误:类型 FroalaEditorModule 没有“ngModuleDef”属性使用 Froala Wysiwyg
- gulp - GUlp - 以下任务未完成
- java - 需要使用 64 位深度的 BufferedImages 创建验证码图像运行时?java支持吗?
- python - Pandas 将部分列索引转换为日期时间
- django - 在具有 2 个或更多副本的容器化 django 应用程序中运行 CronJob 的最佳方法是什么
- google-analytics - 使用用户会话属性设置 Google Analytics(分析)目标
- swift - 转换已发布
.Publisher' 到指定类型'String' / SwiftUI / Xcode - javascript - 如何将多个参数传递给 Web API?
- java - 如何禁止通过滑动删除 RecyclerView 中的某种类型的元素(我希望元素不移动)?