見出し画像

【作業時間大幅カット】Pythonでファイルサイズに応じて簡単に整理する方法

「ファイルのサイズに応じてフォルダを整理したい!」
「データが重いファイルを短時間で分類したい!」
「Pythonで自動的に分類できるって聞いたけどどうすればいいの?」

本記事ではこのような方を対象に、Pythonで特定のフォルダ内にあるファイルをサイズに応じて自動的に分類する方法をご紹介します。

■本記事で分かること
Pythonで特定のフォルダ内にあるファイルをサイズに応じて自動的に分類する方法

■本記事の信頼性
私は、本業でChatGPTなどのAIツールを活用して効率化を実現。ほぼ毎日定時で帰宅し、家族との充実した時間を確保している「なおき」といいます。

AIと全く無縁の体育系で文系出身(数学Ⅱで終わりました)の私でもできる時短術をわかりやすく説明できるよう、Xなどを活用して情報発信しています。

今回は、非エンジニアでもできる「Pythonで特定のフォルダ内にあるファイルのサイズに応じて自動的に分類する方法」をご紹介します!

1.Pythonで整理したいフォルダの準備

まずは、ファイルを整理したいフォルダと整理先のフォルダを準備してください。

今回は、219MB、10MB、1KBのデータをそれぞれ準備しました。

データサイズが異なるファイルの状況

あわせて、testフォルダ内に各ファイルを分類させるための「移動先フォルダ」を作成してみましょう。

2.Pythonスクリプトの準備

次に、Pythonスクリプトを準備します。

以下のスクリプトをお使いの実行環境(VScodeなど)にコピペして下さい。

import os
import shutil

# 分類するファイルがあるディレクトリ
source_directory = 'path/to/your/source/directory'

# 分類先のベースディレクトリ
destination_base = 'path/to/your/destination/directory'

# ファイルサイズに基づいた分類基準(バイト単位)
# これらの値は必要に応じて調整してください
size_categories = {
    'Small': 1024 * 1024,  # 1MB未満
    'Medium': 1024 * 1024 * 100,  # 1MB以上100MB未満
    'Large': float('inf')  # 100MB以上
}

# ファイルをサイズに基づいて分類する関数
def classify_files_by_size(directory):
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        if os.path.isfile(file_path):
            file_size = os.path.getsize(file_path)
            
            destination_folder = None
            
            # ファイルサイズに基づいて適切なフォルダを決定
            for category, max_size in size_categories.items():
                if file_size < max_size:
                    destination_folder = os.path.join(destination_base, category)
                    break
            
            # 分類先のフォルダが存在しない場合は作成
            if not os.path.exists(destination_folder):
                os.makedirs(destination_folder)
            
            # ファイルを移動
            shutil.move(file_path, destination_folder)
            print(f'Moved: {file_path} -> {destination_folder}')

# スクリプトの実行
if __name__ == '__main__':
    classify_files_by_size(source_directory)

このスクリプトは、指定されたディレクトリ内のファイルのサイズを取得し、そのサイズに応じてファイルを分類してくれるものです。

今回は、サイズに応じて以下のように分類できるようになっています。
1MB未満 = Small
1MB以上100MB未満 = Medium
100MB以上 = Large

当然、ご自身のニーズに応じて変更もできるので、適宜のサイズに変更して使用してください!

具体的に変更すべき箇所は以下の部分です👇

# ファイルサイズに基づいた分類基準(バイト単位)
# これらの値は必要に応じて調整してください
size_categories = {
    'Small': 1024 * 1024,  # 1MB未満
    'Medium': 1024 * 1024 * 100,  # 1MB以上100MB未満
    'Large': float('inf')  # 100MB以上

例えば、「Small」を500KB未満、「Medium」を50MB未満、「Large」をそれ以上に変更したい場合は以下のようになります。

size_categories = {
    'Small': 1024 * 500,  # 500KB未満
    'Medium': 1024 * 1024 * 50,  # 500KB以上50MB未満
    'Large': float('inf')  # 50MB以上
}

サイズの計算方法は難しいのですが、1KB(1024バイト)を基準に考えるようになっています。

上記の例では、
1024 * 500: 500KBを表すため、1024バイト(1KB)に500を掛けます。

1024 * 1024 * 50: 50MBを表すため、1024バイト(1KB)に1024を掛けて1MBにし、さらに50を掛けます。

正しく分類するための注意事項ですが…

  • サイズの閾値を設定するときは、単位に注意して正しく計算してください(KB、MB、GBなど)

  • float('inf')は「無限大」を意味し、そのカテゴリが指定されたサイズ以上のすべてのファイルを含むことを示します。

上記の内容に注意して変更してみてください!

とりあえず、先ほどのスクリプトをコピペすると、Pythonの実行環境であるVSCode上で見るとこんな感じ👇になります。

このままだと、ファイルのあるフォルダと移動先のフォルダのパスが指定されていない状態なので、以下の部分を指定のフォルダのパスにしてください。

【変更する箇所】

# 分類するファイルがあるディレクトリ
source_directory = 'path/to/your/source/directory'

# 分類先のベースディレクトリ
destination_base = 'path/to/your/destination/directory'

【変更後】
注意点として、スラッシュを「\\」のように2つにすることを忘れないでください。

# 分類するファイルがあるディレクトリ
source_directory = 'C:\\Users\\・・・・・\\test'

# 分類先のベースディレクトリ(変更が必要な場合はここを編集してください)
destination_base = 'C:\\Users\\・・・・・\\test\\移動先フォルダ'

先ほど設定した「test」フォルダと「移動先フォルダ」をパスに入れました。

ここまで出来たら、あとは実行するだけです!

3.Pythonスクリプトの実行

実行すると、自動で以下のように分類されました!

サイズに応じてフォルダが分類されていることが分かります。

個別に開いてみると以下のようになります👇

Largeフォルダ内
Mediumフォルダ内
Smallフォルダ内

以上で、作業は終了です。
お疲れ様でした!!

4.まとめ

今回は、「Pythonで特定のフォルダ内にあるファイルをサイズに応じて自動的に分類する方法」をテーマに紹介しましたが、いかがだったでしょうか?

  1. 分類したいファイルと分類先のフォルダの準備

  2. Pythonスクリプトの設定とパス(URL)等の入力

  3. Pythonスクリプトの実行

上記の内容が実行できれば、ワンクリックで特定のフォルダ内にあるファイルをサイズに応じて自動的に分類できるようになります!

データサイズに応じて分類する場面はなかなかないかもしれませんが、以下のような分類と組み合わせて使えばフォルダ内の整理に役立つと思います!

  • ファイルの種類

  • ファイルの名前

  • ファイルの作成日

  • ファイルの内容

このような分類も自動でできるようになります。
実際にやってみたい方はコチラ👇

今回紹介した内容で皆さんの業務が少しでも効率化できれば、スキ、SNSでの紹介をしていただけると大変励みになりますので、何卒よろしくお願いします!

このほか、AI×時短術の知識をX(旧Twitter)で紹介していますので、是非フォローしてください!


この記事が気に入ったらサポートをしてみませんか?