【Python】特定ファイルのフォルダー移動

Python

特定のファイルを自動的に任意のフォルダーに移動させる方法をご紹介します。
移動対象となるファイルの条件設定によっては、わずらわしい作業を効率化できるかもしれません。

スポンサーリンク

自動化の概要

今回ご紹介する自動化は、つぎの流れで構成されています。

  1. 事前準備
  2. 特定のファイル情報を取得
  3. 移動先のフォルダー情報を設定
  4. 移動対象となるファイルの条件を設定
  5. 条件に合うファイルを移動

なお、使用するサンプルフォルダーの内容はこちらのとおりです。
フォルダー名「Sample」にさまざなファイルが入っている前提です。

それでは順番に解説をいたします。

ちなみに、実行環境により表記がことなる箇所は、便宜的に「●●●」と表記しています。

事前準備

必要なライブラリーをあらかじめインポートします。

import glob
import re
import os
import shutil

特定のファイル情報を取得

files_from = glob.glob(r"C:\Users\●●●\Sample\*")

実行結果はこちらです。
変数「file_from」にファイル情報を取得して代入しています。

['C:\\Users\\●●●\\Sample\\A社',
 'C:\\Users\\●●●\\Sample\\A社‗報告書.txt',
 'C:\\Users\\●●●\\Sample\\A社‗売上高.txt',
 'C:\\Users\\●●●\\Sample\\B社‗報告書.txt',
 'C:\\Users\\●●●\\Sample\\C社‗報告書.txt']

移動先のフォルダー情報を設定

移動先のフォルダー情報を設定します。

こちらではファイルの移動先として、移動対象となるファイルとおなじ場所にフォルダー名「A社」を設置しています。変数「dir_to」にフォルダー情報を代入しています。

dir_to = r"C:\Users\●●●\Sample\A社"

移動対象となるファイルの条件を設定

移動対象となるファイルの条件設定をします。

こちらでは、非常にかんたんな正規表現をつかって設定をしています。
文字列として「A社」が含まれているかどうかを判定するための設定です。

pattern = re.compile("A社")

条件に合うファイルを移動

さいごに条件に合うファイルを移動する設定をします。

for file in files_from:
    if os.path.isdir(file) == False:
        result = re.findall(pattern, file)
        if result:
            print(file)
            shutil.move(file, dir_to)

こちらが実行後の結果です。
ファイル名に「A社」を含むファイルが移動されていることが確認できます。

C:\Users\●●●\Sample\A社‗報告書.txt
C:\Users\●●●\Sample\A社‗売上高.txt

以下、解説をいたします。

まず、for文をつかって「files_from」に含まれているファイルを順番に取得します。
「files_from」に代入されている情報はこちらです。

['C:\\Users\\●●●\\Sample\\A社',
 'C:\\Users\\●●●\\Sample\\A社‗報告書.txt',
 'C:\\Users\\●●●\\Sample\\A社‗売上高.txt',
 'C:\\Users\\●●●\\Sample\\B社‗報告書.txt',
 'C:\\Users\\●●●\\Sample\\C社‗報告書.txt']

つぎに、ファイルとフォルダを分類します。
ファイルのみを移動対象とするため「os.path.isdir()」を使用しています。
if文で「True」に該当するものは「ディレクトリ」、「False」に該当するものは「ディレクトリではない」という分類方法です。

os.path.isdir(「パス」): ディレクトリ(フォルダ)の該非判定

ちなみに「ディレクトリ」とは「フォルダ」のことを指すと考えていただいて問題ありません。

つぎに、「ディレクトリではない」ものを対象に、あらかじめ設定した「正規表現」をつかって条件判定をします。条件に合致するものを対象として、「print」による表示と「shutil」による移動をしています。

shutil.move(「移動対象」, 「移動先」)

まとめ

こちらがコード全体です。
非常にシンプルな自動化のご紹介となりましたが、ご活用いただけるような内容でしたらカスタマイズしてお使いください。

import glob
import re
import os
import shutil

files_from = glob.glob(r"C:\Users\●●●\Sample\*")
dir_to = r"C:\Users\●●●\Sample\A社"

pattern = re.compile("A社")
for file in files_from:
    if os.path.isdir(file) == False:
        result = re.findall(pattern, file)
        if result:
            print(file)
            shutil.move(file, dir_to)