LEVEL 6 ・ ファイル / Lesson 13
フォルダを見て、ファイル名を変える
フォルダ内のファイルを一覧にして、名前を一括で変更します。安全な進め方も学びます。
このレッスンが終わったら
「フォルダの中身を一覧にして、条件に合うファイルだけ名前を変えられる。変更する前に、まず表示で確認する」と言える。
できることを見る
invoices という名前のフォルダに、請求書のファイルが入っています。
- members.txt
- sales.csv
- invoices/
- invoice_tanaka.txt
- invoice_sato.txt
- invoice_suzuki.txt
- list.csv
このフォルダの中身を、Pythonに一覧にしてもらいましょう。
import os
for name in sorted(os.listdir("invoices")):
print(name)動かしてみる
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
4つのファイルの名前が、表示されましたか。Excelや、パソコンのフォルダ画面で見ていた一覧を、Pythonで取り出せました。
1行ずつ読む
import osファイルやフォルダを扱うための、便利機能セット(os)を使うos.listdir("invoices")invoices フォルダの中にある、ファイルの名前を、リストにして取り出すsorted(...)名前の順(五十音・アルファベット順)に並べるfor name in ...:1つずつ取り出して、「name」と呼ぶ print(name)ファイルの名前を表示する日本語にすると
os.listdir が返すのは、ファイル名のリストです。LEVEL 4 で学んだリストなので、for で1つずつ取り出せます。
1か所だけ変える
① 特定の種類のファイルだけを選ぶ。 .txt で終わるものだけを表示してみましょう。endswith は「〜で終わるか」を調べます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
② ファイルがあるか確認する。 os.path.exists で、あるか・ないかを調べられます。結果は True / False です。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
③ ファイル名を変える。 os.rename(今の名前, 新しい名前) で、名前を変えられます。ここでは、.txt のファイルの先頭に 2025-10_ を付けます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
list.csv は .txt ではないので、そのままです。3つだけが変わりました。os.path.join は、フォルダの名前とファイル名を、正しくつなげます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
自分で書く
お題① invoices フォルダの中に、ファイルが何個あるかを表示してください。(4と表示されれば正解です)
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
os.listdir("invoices") はリストです。リストの数は len() で数えられます。
答えの例を見る
import os
print(len(os.listdir("invoices")))お題② .txt のファイル名の先頭に paid_ を付けて、名前を変えてください。そのあとの、一覧を表示するコードは、最初から書いてあります。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
一覧を表示するコードより前に、for で .txt のファイルを取り出し、os.rename(os.path.join("invoices", name), os.path.join("invoices", "paid_" + name)) を書きます。
答えの例を見る
import os
for name in sorted(os.listdir("invoices")):
if name.endswith(".txt"):
os.rename(os.path.join("invoices", name), os.path.join("invoices", "paid_" + name))
for name in sorted(os.listdir("invoices")):
print(name)