【问题标题】:Python : writing numbers with constant number of characters before the commaPython:在逗号前写入具有恒定字符数的数字
【发布时间】:2019-04-14 08:42:07
【问题描述】:

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

convert -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 之前创建的,但是到目前为止还没有运气......)。

提前致谢!

【问题讨论】:

    标签: python format gif


    【解决方案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']
    

    【讨论】:

    • 感谢您的回答。我有两个问题。 1:我将文件保存在循环中,因此我的代码包含命令 savefig('re_gif/{j:08d}.png') 其中 j 的范围从 1 到 100(j 是时间 t);现在的问题是它在 re_gif 目录中只保存了一个名为 {j:08d} 的文件!我该如何解决? 2.对于你提出的另一种方式,我应该在哪里输入你的命令? Python,终端??
    • 1.您在字符串中的 " 之前遗漏了 f。这就是为什么你会得到一个名为 {j:08d} 的文件。 f 表示 f 字符串,没有它,{ } 没有任何特殊意义。
    • 2.这些示例是 Python 代码,输入 IDLE 进行检查。您需要调用 Python 程序的 sorted() 部分。您没有提供任何代码,因此很难具体说明。
    • 哦,我真傻!我没有注意到f,因为我的代码是以不同的方式编写的(当然,我应该在我原来的问题中写一些东西)。解释器 ideed 抱怨了 f,所以感谢您为这个问题添加了解决方案!现在效果很好,非常感谢!
    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多