Python ファイル名を連番にする便利な関数zfill()

アニメーションファイルを作る際、画像ファイルを連番で保存することがあると思います。

連番とは、言葉の通り連続した番号です。

例として100までの連番は、1は、001と0を埋める必要がありました。

そうでないと、ファイルをソートした時に、思った通りに並んでくれません。

そのソートした順番でアニメーションファイルは作られるため、0を埋めるのは必須です。

方法

例として、100枚以上の画像ファイルを0で埋めていきたいと思います。

条件分岐

一番最初に思いつくプログラムかと思います。

あとで紹介するzfill関数を知らなった私は、このように書いていました。

sheet = 1
while sheet <= 枚数の上限:
    #描画
    if sheet < 10:
        plt.savefig("test-00" + str(sheet) + ".png")
    elif sheet < 100:
        plt.savefig("test-0" + str(sheet) + ".png")
    else:
        plt.savefig("test-" + str(sheet) + ".png")
    sheet += 1

長いコードになりました。

もちろん、画像が1000枚を超えるようなら、もう一つ条件分岐をしないといけません。

zfill関数

組み込み関数であるため、モジュールをインポートする必要もありません。

sheet = 1
while sheet <= 枚数の上限:
    zero_sheet = str(sheet).zfill(3)
    plt.savefig("test-"+ zero_sheet + ".png")

zfill関数の引数ですが、枚数を表す桁数を入れます。

今回の例では、3桁で表すため、3です。

zfill関数の引数を実際の枚数より少ない桁数で指定した場合、枚数sheetがそのままzero_sheetになります。

ドット(.)の前に対象の変数を指定しますが、文字列のみ対象ですので、整数型を文字列型に変換しています。

zfill関数を用いた方が断然コード量が減りました。

まとめ

Pythonでファイル名を連番にしたいならzfill関数

str.zfill(width)

数値文字列strを左側をゼロ詰めし、桁数widthの文字列で返します。