共有フォルダの「最新ファイルどれ?」問題。Pythonで自動選定したら古い台帳での誤爆がゼロになった話

最新ファイルの悪夢

月末のオフィス。蛍光灯の明かりの下、カタカタと鳴るキーボードの音がやけに響く。画面に映し出された共有フォルダを開いた瞬間、思考が完全に停止した。そこにあるのは「全社売上集計_最新.xlsx」「全社売上集計_最新_田中修正.xlsx」「コピー ~ 全社売上集計_最新.xlsx」という。無数のクローンたち。

どれが正本なのか、誰にも分からない。更新日時を見ると、あるファイルは今日の午後。別のファイルは昨日の深夜になっている。しかしファイル名には「最新」と書かれている。胃の奥がギュッと重くなるのを感じた。間違ったファイルを開いて集計を始めれば、数時間の作業がすべて水の泡に帰す。

まず、手動でプロパティを開き、更新日時や作成者を突き合わせて正本を確認する作業には。1回あたり最低でも「5分」の時間を奪われる。

たった1回の確認に過ぎない。しかしその5分が月末の繁忙期には致命的なロスとなる。しかも手動で確認したところで、本当にそれが最新なのか確証は持てない。過去のトラウマが蘇る。

人為ミスの無間地獄

先月の締め作業で「最新」と書かれたファイルを開いて集計を完了させ。上司に提出した。しかし30分後。営業部長から「うちの部署の売上が先週の数字のままだぞ」と内線が鳴り響いた。実は「最新_最終」という別ファイルが深い階層の別フォルダに存在しており。私が開いたのは誰かが誤って保存した古いコピーだったのだ。全社に訂正メールを流すときの、手汗でマウスが滑る感覚と。キーボードを叩く指の震えが今でも忘れられありません。

次に、人間の目による確認には限界がある。どんなに注意深くプロパティを見比べても、焦燥感の中でミスは必ず起きるのだ。この無間地獄から抜け出すには、根本的な解決策が必要だった。

命名規則破綻のメカニズム

「ファイル名の末尾に必ずYYMMDD形式で日付を入れること」
全社に向けて何度お触れ書きを出しただろうか。総務や経理が主導して厳格な命名規則を作っても、半年後には必ず形骸化する。

共有フォルダのファイル数は優に数百件を超える。それらすべてにルールを適用し続けるのは、人間の性質に反している。誰かがデータを壊してしまうことを恐れ、作業の前に必ず「コピー」を生成する。別の担当者が良かれと思って「_確認済み」という文字を勝手に付け足す。

一方で、ルールが破綻するメカニズムは非常にシンプルだ。人間は不安を感じる生き物だからである。上書き保存で過去のデータを消してしまう恐怖から逃れるため。とりあえず別名で保存する。その連鎖が、誰にも真実が分からないファイル群の山を生み出す。

命名規則という「性善説」に基づいた運用は、必ずどこかでエラーを引き起こす。文字情報という不確かなものに頼り続ける限り、集計ミスの恐怖は消えない。必要なのは、人間の曖昧な行動に左右されない、絶対的な基準だった。

真の最新ファイル:OSデータと正規表現

どうすれば確実な正解を導き出せるのか。答えは、OSが黙って記録し続けているシステムデータの中にあった。人間が入力するファイル名は嘘をつくが。Windowsが刻むタイムスタンプは嘘をつかない。そこで白羽の矢が立ったのがPythonです。

そのため、仕組みはこうだ。osモジュールやglobモジュールを使って。指定した共有フォルダ内の全ファイル名をリストアップする。数百件のファイル群を一瞬でプログラムの土俵に引きずり込む。

ただファイル名を取得するだけでは意味がない。ここで強力な武器となるのが、os.path.getmtimeという関数だ。これはファイルが最後に変更された時刻。つまり「最終更新時刻」を正確な数値として弾き出してくれる。OSの深層に眠る真実の時間を引きずり出すのです。

ここで一度立ち止まって考えてみてください

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

更新日時だけでは不十分:真の最新ファイル確定術

しかし、単純に更新日時が一番新しいものを選べば良いというほど、実務は甘くない。「過去の台帳を今日開いて。何も変更せずに上書き保存してしまった」という事故が頻繁に起きるからだ。古いデータのタイムスタンプだけが最新に上書きされてしまう現象です。

しかし、これを防ぐためには、正規表現を用いた知恵が必要になる。ファイル名の中に含まれる「20240417」のような日付や連番の文字列を抽出し。os.path.getmtimeの時刻データと掛け合わせる。ファイル名の意図と、OSの物理的な記録。この2つを照らし合わせて初めて。「真の最新ファイル」を確定させることができるのです。

私も最初はファイルの作成日時(os.path.getctime)を取得してしまい。別フォルダからコピーしてきた古いファイルが「たった今作成された最新ファイル」として誤判定される事態に陥った。検証テストの段階で、売上高がなぜか半年前の数字に先祖返りしており、背筋が凍った。作成日時と更新日時の違いという。非エンジニアが見落としがちなOSの仕様の罠に完全にハマっていたのです。

Pythonで最新ファイルを瞬時抽出

頭で理解しても、実際のコードとして動かさなければ意味がない。複雑なツールは不要だ。数行のシンプルなコードが、数時間の苦役を消し去る。

さらに、フォルダ内の全ファイルをスキャンするロジックを組み立てる。os.listdirを使えば、フォルダの中にあるすべてのファイル名を取得できる。取得したファイルリストに対して、順番に最終更新時刻を調べていく。

ここでプログラミング初心者が必ず直面する壁がある。「取得した日付のリストから。どうやって一番新しいものだけを抜き出すのか」という問題だ。forループを回して変数を更新していく泥臭い書き方もある。だが、Pythonにはもっと洗練された必殺技が用意されている。

max関数とkey引数にlambda(ラムダ式)を組み合わせたソートだ。ファイルパスのリストをmax関数に渡し。判定基準となるkey引数にos.path.getmtimeを指定する。たったこれだけで、数百件のファイルの中から更新日時が最大(つまり最新)のものを。確実に一本釣りできる。

最新ファイル特定、0.1秒の衝撃

まず、時刻データはそのままでは人間には読めないシリアル値になっている。そのため、datetimeオブジェクトに変換して。見慣れた日付フォーマットに戻す処理も忘れずに組み込む。

もしファイル名に付与された日付も判定基準に含めたい場合は。reモジュールによる正規表現を追加する。数字8桁の並びを探し出し、それを比較材料にする。これらを組み合わせたスクリプトを走らせた瞬間、とてつもない出来事が起きる。

初めて完成したスクリプトをテスト環境で実行した日のことは鮮明に覚えている。コマンドプロンプトに「python get_latest.py」と打ち込み。エンターキーを叩く。瞬きする間もなく「最新ファイルは 全社売上集計_20240430_修正版.xlsx です」と正解がコンソールに出力された。今まで5分かけて目視確認し、それでも不安を抱えていた作業が。文字通り0.1秒で終わった。その圧倒的な処理スピードを前に、思わず「嘘だろ」と声が出た。

Python自動選定、業務効率と心の平穏

次に、Pythonによる自動選定が業務に組み込まれてから、日常の風景は劇的に変わった。

共有フォルダにどれだけ「コピー」や「最新(1)」が散乱していようと。もう気にする必要はない。スクリプトを起動するだけで、システムが絶対的な知恵を見つけ出し。正しいファイルだけを次の集計プロセスへと渡してくれる。

手作業で5分かかっていた確認作業は完全に消滅し。Pythonスクリプトによるフルスキャンと選定はわずか「0.1秒」で完了するようになった。

一方で、時間的なメリットだけではない。「間違ったファイルを開いてしまうかもしれない」という重圧からの解放。これこそが、自動化がもたらした最大の恩恵です。

人間は、疑心暗鬼になりながら単純作業を繰り返すために雇われているわけではない。「どれが開くべきファイルか」を血眼になって探す時間が消滅したことで。脳に圧倒的な余裕が生まれた。集計された数字の異常値に気づき、経費削減の施策を練る。本来やるべきクリエイティブな業務に。持てるエネルギーのすべてを注ぎ込めるようになった。

誤爆ゼロのスクリプト、心の平穏

もう、月末の共有フォルダを恐れる必要はない。古い台帳での誤爆をゼロにしたこの小さなスクリプトは。単なる業務効率化ツールを超えて、強力な盾となっている。冷たいプログラミング言語が、働く人間の心に確かな平穏をもたらしたのです。

関連リンクとチェックリスト

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →