しごと自動化レシピ

WORK RECIPE Python

Pythonで定型ログから問い合わせ番号を抜き出す

検証ログに含むTICKET番号を、出現順の確認リストにします。数字の桁数と前後の境界を固定し、似た文字列を拾いすぎない条件で、行番号付きのCSVを新規出力します。

掲載コード実行確認

確認日時:2026-10-17T07:36:11.573547+00:00

確認環境:{"os": "Windows", "os_release": "11", "python": "3.14.2", "launch_flags": ["-I", "-X", "utf8"]}

確認した範囲

  • 記事の入力例と期待結果を照合
  • 元入力のバイト列が不変
  • 同じ出力先への再実行を拒否し既存出力を保全

未確認・対象外

  • 実業務データ
  • 他OS・他Python版

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

できあがるもの

ヘッダー以外に3行が出力され、XTICKET-9999は除かれる想定。番号が本当に存在するかは問い合わせシステムへ照会しない。確認環境と範囲は本記事の実行確認欄を参照してください。

始める前に

  • Python 3.11以降の実行環境。標準ライブラリだけを使い、追加パッケージや外部APIは不要。python --versionで起動を確認する。
  • 新しいローカル検証フォルダに架空の入力だけを置く。本番の共有フォルダや同期フォルダで実行しない。
入力例

app.logの3行は「INFO TICKET-0012 opened」「DEBUG XTICKET-9999」「INFO TICKET-0050 and TICKET-0012」。UTF-8で保存する。

手順

  1. 新しい検証フォルダにapp.logを置き、tickets.csvが存在しないことを確認する。問い合わせ内容や顧客情報は入れず、番号を取り出す条件だけを試す。
  2. 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python import csv import re from pathlib import Path pattern = re.compile(r'(?<![A-Za-z0-9_])TICKET-[0-9]{4}(?![A-Za-z0-9_])') lines = Path('app.log').read_text(encoding='utf-8-sig').splitlines() with Path('tickets.csv').open('x', encoding='utf-8', newline='') as output: writer = csv.writer(output) writer.writerow(['line', 'ticket']) for number, line in enumerate(lines, 1): for match in pattern.finditer(line): writer.writerow([number, match.group(0)]) ```
  3. ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
  4. tickets.csvをテキストエディタで開き、行1に0012、行3に0050と0012の計3件が出るか確認する。重複は意図して残すので、このCSVをユニークな問い合わせ件数と同じ意味に使わない。

期待結果と照合する

ヘッダー以外に3行が出力され、XTICKET-9999は除かれる想定。番号が本当に存在するかは問い合わせシステムへ照会しない。確認環境と範囲は本記事の実行確認欄を参照してください。

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

うまくいかないとき

  • 番号の桁数や前後記号が変わると取りこぼす。正規表現を変更したら一致・不一致両方を試す。
  • ログには秘匿情報があり得る。実ログの全文や抽出結果を公開サイトへ貼らない。

止める・元に戻す

生成したtickets.csvを削除する。app.logは変更していないので、抽出条件を見直して別名出力へ再実行できる。

公式資料・対応範囲

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

同じツールで試す

Pythonの記事一覧へ →