【Automatorで自動化】ファイルの拡張子別にフォルダを作成して格納【Python】

もくじ

目標

拡張子別にフォルダを作成して格納します。
そのとき、フォルダ名を任意の名前に自動で変更します。

Automatorだと拡張子名のフォルダ名になると思いますが、それを任意に指定できるようにします。

必要なフォルダ構成を作る

デスクトップにtestフォルダにfromフォルダとtoフォルダを用意します。

test
 ├──from
 └──to

testフォルダ直下にseparate.pyというファイルを作成し、fromフォルダ内にtxtファイルとjpgファイルを格納します。toフォルダは空のままでOKです。

今回は画像のような構成にしました。

f:id:bonoponz:20210702204312p:plain

自動化するPython

先ほど作成したseparate.pyの中身を以下のようにします。

import os
import shutil

file_extensions = ['jpg', 'txt']  // ◆

#読み取りたいディレクトリパスを入れる
read_path = './from'
read_files = os.listdir('./from')

#拡張子リストを取得するfor文を追加する
for file_extension in file_extensions:
    if(file_extension == 'jpg'):  // ▲1
      file_extension_folder = '画像ファイル'  // ▲2
    if(file_extension == 'txt'):  // ★1
      file_extension_folder = 'テキストファイル'  // ★2
    os.mkdir('./to/' + file_extension_folder)

    #指定の拡張子だけのファイル名をリストを作る
    file_list = []
    for file_name in read_files:
        if file_name.endswith(file_extension):
            file_list.append(file_name)

    #read_listから、指定の拡張子のファイルだけ指定のディレクトリにコピーする
    for file_name in file_list:
        move_from = './' + read_path + '/' + file_name
        move_to = './to/' + file_extension_folder + '/'
        shutil.move(move_from, move_to)

◆部分で、フォルダ別に格納したい拡張子をしています。もしjpgtxt以外にもファイルがあるなら増やすことが可能です。

▲1にある拡張子を▲2のフォルダ名を作成して格納します。
同様に★1にある拡張子を★2のフォルダ名を作成して格納します。

フォルダがなければ作成し、すでにフォルダがある場合は格納のみ実行します。

実行してみる

ここは飛ばしてもいい項目です。

ターミナルが使える方はここで終了してもいいかもです。

$ python3 separate.py

ファイルが分別されたはずです。

ではファイル構成を元に戻してください。

Automator

設定

Macに標準搭載されているAutomatorを起動します。

ファイル>新規をクリックしてアプリケーションを選択します。

f:id:bonoponz:20210702202507p:plain

シェルスクリプトを実行」を検索します。

f:id:bonoponz:20210702202542p:plain

検索で出てきた項目を右側にドラッグ&ドロップします。

f:id:bonoponz:20210702202650p:plain

この欄を埋めていきます。

f:id:bonoponz:20210702203726p:plain

Pythonファイルのディレクトリ確認

ターミナルを起動して以下を実行。

Pythonの実行ファイルがあるディレクトリを検索できます。

$ which python3
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3

私の場合はLibrary配下のようですね。この結果は人によって異なるかもしれません。

コマンドを入力

cd /Users/****/Desktop/test  // testフォルダのパスを指定
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 separate.py

f:id:bonoponz:20210702204739p:plain

解説。

cd /Users/****/Desktop/test

testフォルダのパスを指定してcdコマンドを使って移動します。

testフォルダのパスは、Finderでtestフォルダを右クリックしメニューを出した後optionを押してください。パスをコピーできます。

f:id:bonoponz:20210702210946p:plain

/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 separate.py

/Library/Frameworks/Python.framework/Versions/3.9/bin/python3の部分は先ほど検索したPythonの実行ファイルをパスごと指定しています。

そのあとに作成したseparate.pyを指定することで、separate.pyPythonの実行ファイルで実行できます。

Automator実行

右上の「実行」ボタンを押して実行してみましょう。

ファイルが分別されたら完成です。

f:id:bonoponz:20210702204927p:plain

Automator保存

この自動化したAutomatorファイル>保存からtestフォルダに保存します。名前はseparate.appとしました。

f:id:bonoponz:20210702205639p:plain

手順

  1. fromフォルダに分別したいファイルを格納
  2. separate.appをダブルクリックで実行
  3. 「ファイルにアクセスしようとしています」のダイアログをOKする
  4. toフォルダにフォルダ別にファイルが移動

今後はこれだけの手順でファイルをフォルダ別に分別できます。

f:id:bonoponz:20210702211446p:plain

お疲れ様でした!

参考URL

大量のファイルを一瞬で、種類ごとのフォルダに移動させる|Python自動化 | キノコード

Python ファイルのコピーと移動 - Python のファイル操作 - Pythonのきほん - やさしい Python 入門

Automatorを使うと、クリック1つでPythonとかのプログラムを起動させられるんだってさ(Mac) - Qiita