しごと自動化レシピ

WORK RECIPE Python

Pythonで重なる停止時間を統合して二重計上を防ぐ

重なった停止区間を一つにまとめ、総停止時間を求めます。個々の記録を足すだけでは重複する時間を数え過ぎる場合に使います。

停止した区間 → 統合区間と合計(作業の流れを表す概念図)
掲載コード実行確認

確認日時:2026-10-18T06:28:42.149242+00:00

確認環境:{"python": "3.14.2 (tags/v3.14.2:df79316, Dec 5 2025, 17:18:21) [MSC v.1944 64 bit (AMD64)]", "platform": "Windows", "launch": ["-I", "-X", "utf8"]}

確認した範囲

  • 掲載した完全なPythonコードを一時フォルダのrecipe.pyへ保存し、隔離起動で実行
  • 標準出力全文を事前に定義した期待文字列と完全一致で比較

未確認・対象外

  • 実業務入力・大量データ・全異常系
  • GUI操作・外部サービス・通信

実機での処理結果の確認と、記事の全画面操作の確認は別です。実行確認の記録(JSON)で確認結果と原稿のSHA-256を参照できます。

できあがるもの

標準出力は「[[1, 6], [8, 9]] / total 6」。この小さな固定入力の確認であり、大量データ、実業務の入力、権限、GUI操作の検証は含みません。

始める前に

  • Python 3.11以降。標準ライブラリだけで動く例です。追加パッケージやネット接続は使用しません。
  • 架空の入力だけで新しい検証用フロー・作業フォルダを用意する。本番データ、認証情報、個人情報は使わず、入力と出力を目視で照合できる少量から始める。
入力例

区間1〜4、3〜6、8〜9。単位は分。

手順

  1. 空の検証フォルダを新しく作成し、次のコードをrecipe.pyとしてUTF-8で保存します。入力例はコード内に明示しているので、初回は値を変えずそのまま試します。実データのパスやURLへ置き換える前に、ここで使う比較単位と境界を確認します。
  2. 掲載コードの全文です。省略記号はありません。出力は画面表示のみとし、ネット送信や既存ファイルの変更は行いません。
    intervals=[(1,4),(3,6),(8,9)]
    merged=[]
    for start,end in sorted(intervals):
        if start>=end: raise ValueError('invalid interval')
        if merged and start<=merged[-1][1]:
            merged[-1][1]=max(merged[-1][1],end)
        else: merged.append([start,end])
    print(merged)
    print('total',sum(end-start for start,end in merged))
  3. ターミナルを検証フォルダで開き、python -X utf8 recipe.pyを実行します。Pythonのバージョンはpython --versionで先に確認します。例外が出たときは、元データを修正して無理に通さず、行番号とメッセージを確認して処理を止めます。
  4. 期待する標準出力を以下と一字ずつ照合します。行数だけでなく、並び順・数値の桁・対象外の項目も確認してください。 [[1, 6], [8, 9]] total 6 入力を一つ変えた別のコピーでも境界条件を試し、業務上の意味が変わらないことを確認してから使います。

期待結果と照合する

標準出力は「[[1, 6], [8, 9]] / total 6」。この小さな固定入力の確認であり、大量データ、実業務の入力、権限、GUI操作の検証は含みません。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • 異なる設備の停止を同じ集合に混ぜません。接する区間を統合する仕様です。
  • 例の並び順や丸めを仕様として固定してから拡張します。実データに欠損・型違いがある場合の扱いは別に決め、結果を原本へ自動で書き戻さないでください。

止める・元に戻す

プログラムを終了し、今回新規作成したrecipe.pyと検証フォルダだけを片付けます。一時フォルダを作るコードは終了時に自動で片付きます。入力例はコード内の定数なので業務データの復元は不要です。

公式資料・対応範囲

参照日:2026-10-18。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

Pythonの記事一覧へ →