【一括リネーム】フォルダ名をファイル名に入れる方法【Python使用】

個人開発

例えばあなたが、こんなフォルダをもらったとしましょう。

会社
 |
 |
 |ーー営業部ーー佐藤.jpg
 |                   |
 |                   ー田中.jpg
 |
 |ーー経理部ーー山田.jpg
 |                   |
 |                   ー内田.jpg
 |
 |ーー制作部ーー山本.jpg
                     |
                     ー中村.jpg

「会社」フォルダ直下に「営業部」「経理部」「制作部」の部署ごとのフォルダがあります。それぞれの中には、各部署に所属する社員の写真がjpgデータで入っています。

これを例えば、サムネイルとしてまとめて印刷したい。

こんな風に。

そのためにまず、しなければいけないことは、

次の2つではないでしょうか。

  • フォルダの名前をファイル名に入れる
    • 例えば「田中.jpg」を「営業部_田中.jpg」にする。
  • 各フォルダからファイルを全て取り出す
    • 「営業部」「経理部」「制作部」から取り出し、1階層上の「会社」フォルダ直下に移動。→画像ファイルを全選択してサムネイル出力。

ファイルやフォルダの数が少なければ、手作業でも簡単です。

でも、何十ものフォルダに何十ものファイルが入っていたら?

うんざりしますね。

フォルダから画像を取り出す作業だけでももう面倒です。ファイル名にフォルダ名をいちいち入れていたら、どのくらいかかるでしょう? 同じ作業を、毎日いくつもやるはめになったら?

誰でも自動化を考えるでしょう。

この記事では、Pythonを使って自動化する方法を紹介します。

まずは事前準備…Jupyter Notebookをインストール!

まずはPythonをデスクトップで動かす方法について、考えてみましょう。

特に仕事効率化のために、PC上でPythonを起動させるとしたら、どういう方法が最適といえるでしょうか。Visual Studio Codeなどのエディタを使っても実行できるかもしれませんが、ここでは環境構築の手間が省けるJupyter Notebookをおすすめしておきます。

Google Colaboratoryなどクラウド上で実行するタイプは基本、デスクトップのファイルを編集できないので、この場合にはあまりおすすめできません。

pip install jupyter

でインストールして、そのままコマンドで

jupyter notebook

と入力すればブラウザ起動…できるはずですが、うまく開かなかったらコマンド画面に出てくる「http://localhost:8888/?token=xxxxxxxxxx」というURLをブラウザのURL欄に貼り付けてください。

こんな画面が出てきたら、pythonコードを入力して実行しましょう。

フォルダ名をファイルに入れる

準備ができたら、さっそくフォルダ名をファイル名に入れていきます。

import os


path = r"/Users/**ユーザー名**/Desktop/**フォルダ名**/" #フォルダのパス。最後尾にスラッシュ入れる。
listname = os.listdir(path)


for l in listname:
    if os.path.isdir(path + l) and l not in '.DS_Store': #フォルダかファイルか判定、.DS_Storeは除く。
        filename = os.listdir(path + l)
        for f in filename:
            old = path + l + "/" + f
            new = path + l + "/" + l + "_"+ f
            os.rename(old,new)
    else:
        pass

このコードをJupyter Notebookにコピペしたら、デスクトップに戻ってフォルダのパスを取得しましょう。

「会社」フォルダを選択して、

Macなら、option + command + C

Windowsなら、Shift + 右クリック → 「パスのコピー」を選択

これでファイルパスがクリップボードにコピーされます。

後はこれをペーストするだけ。

path = r"/Users/**ユーザー名**/Desktop/**フォルダ名**/" 

赤い字の部分、””ダブルクォーテーションの間にペーストしてください。

この時、必ずファイルパスの最後尾に「/」を入れるようにしてください。入れないとうまく動かないので。

パスを入れたら後は▶ボタンを押して実行するだけ。

「会社」フォルダ内の、例えば「営業部」フォルダの「佐藤.jpg」が、「営業部_佐藤.jpg」になっていたら、実験は成功です。

フォルダからファイルを取り出す(1階層上へ移動)

続いて、フォルダからファイルを取り出す作業。これもPythonを使えば一括です。

import shutil
import os


path = r"/Users/**ユーザー名**/Desktop/**フォルダ名**/" #フォルダのパス。最後尾にスラッシュ入れる。
listname = os.listdir(path)

for l in listname:    
    if os.path.isdir(path + l): #フォルダかファイルか判定
        filename = os.listdir(path + l)
        for f in filename:
            if  f not in '.DS_Store': #.DS_Storeは除く。
                old = path + l + "/" + f
                new = path #1階層上へ。
                shutil.move(old,new)
            else:
                pass
    else:
        pass

先ほどと同じように、パスを取得したらペーストして実行してみてください。shutil.move()でパスを付け替えて、ファイルを1階層上に移動します。

どちらのコードでもポイントは、隠しファイル’.DS_Store’を無視する仕組みになっていること。ほとんどのフォルダに隠れているファイルで、読み取ろうとするとエラーになります。

どちらもちょっとした小技ですが、Jupyter Notebookのipynbファイルとして保存しておけば、作業が発生するたびに呼び出せて便利でしょう。

皆さまの日々の作業が、少しでも楽になりますように。

コメント

タイトルとURLをコピーしました