【Python】大量の空フォルダを一括作成して時間削減【業務効率改善】

おそらく一般的には大した内容ではないのだろうが、備忘録的に、何をしたのか書き留める。


結論:


1日2時間作業をした場合、完了まで約40営業日を費やすであろう空のフォルダ作成を、Python x GPT-4oの活用で、検索時間含めて約1時間で完了できた。

背景:


自動車製造 x 地方 x 約130人規模の中小企業において、これまで各部署がバラバラに書類を保存したり、ファイル名に統一ルールがなかったりと、文書管理が煩雑だった。そのため、過去の図面や仕様書などを参照しくても、該当書類に辿り着くのにかなり複雑で、各自が探すことをイライラしながら毎日無駄な時間を使っていた。

そこで、以前導入した1案件(車両)ごとに付与されるトレーサビリティナンバー(以降トレサビ)をキーに全社共通でフォルダ管理をしていこうという方針になった。ただ、サーバーに保管されている過去20年以上分のフォルダや書類をさーっと見てみると大量にデータがあることを確認し、途方もない時間がかかりそうだと少し億劫になった。

とりあえず、フォルダを作らないことには書類をトレサビ別に移動することもできないため、トレサビが付いている過去案件数を集計してみた。
約1500以上の案件数があった。1案件には、見積や仕様書、図面などさまざまな書類が存在し、細かく分けても9つのサブフォルダを作成する必要がある。1500トレサビ * 9サブフォルダ = 13,500空フォルダを作成しなければならない。

やったこと:


1つのトレサビフォルダとその中に9つのサブフォルダを作成するのは、手動だと単純計算で約10~20秒ほどでできるだろう。実際にそうやって手動でトレサビ空フォルダを作っている他社員がいた。
1件20秒として3件に1分かかる。3件*120分=360件、2時間で360件。
13,500フォルダ / 360件 = 37.5営業日かかる。実際は1500トレサビ以上に案件数があるため、ざっくりでも約40営業日かかると考えていいだろう。
何か自動でできる方法はないかと思い、GPT-4oに以下を質問してみた。

トレーサビリティ番号ごとにフォルダを作成し、そのフォルダ内に以下サブフォルダを自動で一括作成したいです。
トレーサビリティ番号:
T0143535 T02534343 T432434 ・・・・
※T以降の番号は実際の番号とは異なる。
サブフォルダ:
見積書 発注書 仕様書 工程表 契約書 議事録 図面PDF 写真 車検証

そうすると、以下が返ってきた。

これらのトレーサビリティ番号ごとにフォルダを作成し、さらにその中に指定されたサブフォルダを自動で一括作成するためのPythonスクリプトを提供します。このスクリプトを実行すると、指定されたフォルダ構造が自動的に作成されます。

import os

# トレーサビリティ番号のリスト
traceability_numbers = [
  T0143535 T02534343 T432434
]

# サブフォルダのリスト
subfolders = [
    "見積書", "発注書", "仕様書", "工程表", "契約書", "議事録", "図面PDF", "写真", "車検証"
]

# フォルダを作成するベースパス
base_path = "/path/to/base/folder"  # 必要に応じて変更してください

# フォルダ作成
for number in traceability_numbers:
    # トレーサビリティ番号のフォルダパス
    folder_path = os.path.join(base_path, number)
    os.makedirs(folder_path, exist_ok=True)
    
    # サブフォルダ作成
    for subfolder in subfolders:
        subfolder_path = os.path.join(folder_path, subfolder)
        os.makedirs(subfolder_path, exist_ok=True)

print("フォルダ構造が作成されました。")

このスクリプトを実行する際に、base_pathを実際にフォルダを作成したいディレクトリに変更してください。このスクリプトは、各トレーサビリティ番号のフォルダを作成し、その中に指定されたサブフォルダを作成します

ディレクトリやこのコードをGoogle Colaboratoryにインプットするまでの手順もわからなかったため、「もう少し詳細に手順を教えてください」と返したところ、Google Driveをマウントするところから詳細なステップを解説してくれた。上記コードも改めて返してくれた。

その結果、全てのトレサビ用フォルダと9つのフォルダも自動生成することができて、内心めちゃくちゃ感動した。データ量を見て、絶対心が折れると思っている作業を、一部ではあるものの、ものの数分で自動生成することができた。理系の人やコードを書ける人なら当たり前のことだろうが、プログラムの凄さをリアルに実感することができて、ハマりそうだと思った。もっとPythonでできることを知りたいと思った。

ちなみに、作業完了後にコードの内容について知りたくて以下のようなやり取りを行ってかなり勉強なった。

俺:
以下書いてもらったコードを1行ずつどういう意味や意図があるのかを文系で全くコードが書けない人にもわかるように説明してください。

GPT-4o回答:
もちろんです。以下にコードを一行ずつ説明します。

コードの説明

import os
  • 説明: `os` というPythonの標準ライブラリをインポートしています。このライブラリは、ファイルやディレクトリの操作を行うために使用されます。

  • 意図: フォルダやファイルを作成するために必要な機能を使うためです。


# トレーサビリティ番号のリスト
traceability_numbers = [

]
  • 説明: これはトレーサビリティ番号(識別番号)のリストです。

  • 意図: 各識別番号に対応するフォルダを作成するための番号をまとめています。


# サブフォルダのリスト
subfolders = [
    "見積書", "シャシ見積書兼発注書", "仕様書", "工程表", "契約書", "議事録", "図面PDF", "写真", "車検証"
]
  • 説明: これは各トレーサビリティフォルダ内に作成するサブフォルダのリストです。

  • 意図: 各トレーサビリティフォルダにこれらのサブフォルダを一括で作成するためです。


# フォルダを作成するベースパス
base_path = '/content/drive/My Drive/TraceabilityFolders'  # 必要に応じて変更してください
  • 説明: フォルダを作成する基本となるパスを指定しています。

  • 意図: どこにフォルダを作成するかを決めるためです。ここではGoogle Drive内の特定のパスを指定しています。


# フォルダ作成
for number in traceability_numbers:
  • 説明: `traceability_numbers` リストの各トレーサビリティ番号についてループを開始します。

  • 意図: 各トレーサビリティ番号に対応するフォルダを順番に作成するためです。


    # トレーサビリティ番号のフォルダパス
    folder_path = os.path.join(base_path, number)
  • 説明: ベースパスとトレーサビリティ番号を結合して、フォルダの完全なパスを作成します。

  • 意図: 各トレーサビリティ番号に対応するフォルダのパスを取得するためです。


    os.makedirs(folder_path, exist_ok=True)
  • 説明: `folder_path` で指定されたフォルダを作成します。フォルダが既に存在する場合はエラーを出さずに続行します。

  • 意図: 各トレーサビリティ番号に対応するフォルダを実際に作成するためです。


    # サブフォルダ作成
    for subfolder in subfolders:
  • 説明: 各トレーサビリティフォルダ内でサブフォルダを作成するために、`subfolders` リストの各サブフォルダについてループを開始します。

  • 意図: 各トレーサビリティフォルダ内に必要なサブフォルダを一括で作成するためです。


        subfolder_path = os.path.join(folder_path, subfolder)
  • 説明: トレーサビリティフォルダのパスとサブフォルダの名前を結合して、サブフォルダの完全なパスを作成します。

  • 意図: 各サブフォルダのパスを取得するためです。


        os.makedirs(subfolder_path, exist_ok=True)
  • 説明: `subfolder_path` で指定されたサブフォルダを作成します。サブフォルダが既に存在する場合はエラーを出さずに続行します。

  • 意図: 各トレーサビリティフォルダ内に指定されたサブフォルダを実際に作成するためです。


print("フォルダ構造が作成されました。")
  • 説明: フォルダ構造が正しく作成されたことを知らせるメッセージを表示します。

  • 意図: スクリプトが正常に終了したことを確認するためです。


全体の流れ
このスクリプトは、指定されたトレーサビリティ番号のリストに基づいて、各番号に対応するフォルダと、そのフォルダ内に一連のサブフォルダを作成するプロセスを自動化するものです。具体的には、まず基になるパスを設定し、各トレーサビリティ番号のフォルダを作成し、その中に必要なサブフォルダを追加していきます。最後に、処理が完了したことを知らせるメッセージを表示します。

まとめ:


以上が回答として返ってきた内容。for ループとos.makedirs以外はある程度意味がわかったので、その二つに関してはさらに詳細に解説をお願いした。
forループは、繰り返し処理を行うための構文ということで、トレサビをnumberという変数に格納する。os.makedirsは、osライブラリ内にある関数で、おそらくmake directoriesの略なんだろうが、要は再帰的(〜だったら〜する的な)にフォルダ(ディレクトリ)を作ってくれるというものだと理解した。

Pythonで使われるライブラリ、モジュール、関数などなどたくさんあるようなので、これから実行したい事柄を起点に必要に応じて調べて覚えていくスタイルを取ろうと思う。
業務効率化とデータ分析をPythonで手軽に素早くできるようになりたい。

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