例えばあなたが、こんなフォルダをもらったとしましょう。
会社
|
|
|ーー営業部ーー佐藤.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ファイルとして保存しておけば、作業が発生するたびに呼び出せて便利でしょう。
皆さまの日々の作業が、少しでも楽になりますように。
コメント