Pythonで桁数を揃えて連番を生成する方法|zfillでファイル名を整列

ファイル名に「1」「2」「10」…と番号を付けたら、並び順がぐちゃっと崩れて困ったことはありませんか?

私自身、最初は「まあ仕方ないか」「後で探せばいいか」と流していました。

でも、Pythonで たった1行 書いただけで、フォルダの中が 一瞬で整列した ときは、正直ちょっと感動しました。

この記事では、プログラミングが得意でなくても使える「桁数を揃えた連番」の作り方を、必要なところだけに絞って紹介します。

目次

なぜ桁数を揃えた連番が必要なのか

ファイル名に連番を付けるとき、何も考えずに 1,2,3,・・・10と付けてしまうと、フォルダでは次のように並びます。

Bash
file_1.txt
file_10.txt
file_2.txt
file_3.txt

数字としては正しくても、文字列として並ぶ ため、順番が崩れて見えてしまうのです。

一方で、桁数を揃えてこうするとどうでしょう。

Bash
file_001.txt
file_002.txt
file_003.txt
file_010.txt

一覧表示でもきれいに整列し、「探す」「確認する」「間違えない」が一気に楽になります。

この “ちょっとした整い” が、日々の作業ストレスを確実に減らしてくれます。

Pythonで連番を生成する基本

まずは、Pythonで連番を作る一番シンプルな方法です。

Python
for i in range(1, 11):
    print(i)

これで から 10までの数字が順番に表示されます。

ただし、このままでは桁数は揃っていません。

そこで次に、桁数を揃える方法 を見ていきます。

桁数を揃えた連番を生成する方法

まずはこれだけ覚えればOK:zfill()

zfill() は、文字列の左側をゼロで埋めて、指定した桁数に揃えてくれるメソッドです。

Python
for i in range(1, 11):
    print(str(i).zfill(3))

このコードは、1から10までの連番を3桁で揃えて出力します。結果は以下の通りです。

Bash
001
002
003
004
005
006
007
008
009
010

ポイントはこの2つだけです。

  • 数字を str() で文字列に変換する
  • zfill(3) で「3桁になるまで左をゼロで埋める」

「桁数を揃えたい」だけなら、これで十分 です。

余裕が出てきたら:format / f文字列

もう少し慣れてきたら、format() や f文字列という書き方も使えます。

Python
for i in range(1, 11):
    print("{:03}".format(i))

または、

Bash
for i in range(1, 11):
    print(f"{i:03}")
  

どれも結果は同じです。

  • シンプルに書きたい → zfill()
  • 表示形式を細かく制御したい → format() / f文字列

という使い分けで問題ありません。

ファイル名に連番を付ける実践例

実務で一番よく使うのが、ファイル名に連番を付けるケース です。

Python
base_filename = "file"

for i in range(1, 11):
    filename = "{}_{:03}.txt".format(base_filename, i)
    print(filename)

実行結果はこちら。

Bash
file_001.txt
file_002.txt
file_003.txt
file_004.txt
file_005.txt
file_006.txt
file_007.txt
file_008.txt
file_009.txt
file_010.txt

画像保存、CSV出力、ログファイル作成など、「あとから並べて見たいファイル」 では特に効果を発揮します。

まとめ|小さな工夫で、作業は驚くほど楽になる

桁数を揃えるなんて、最初は本当に小さな工夫です。

でも、バラバラに並んでいたファイルが一瞬で整列する のを見ると、「Pythonって、こういうところが楽なんだな」と実感できました。

全部を覚える必要はありません。
今日使えそうな 1行だけ、そっと手元に置いておけば十分です。

こうした 小さく楽になる体験 を、少しずつ増やしていけるのがPythonの良さだと思います。

(補足)この記事で紹介したコードまとめ

Python
# zfill を使った連番
for i in range(1, 11):
    print(str(i).zfill(3))

# ファイル名に連番を付ける例
base_filename = "file"
for i in range(1, 11):
    filename = "{}_{:03}.txt".format(base_filename, i)
    print(filename)
目次