しごと自動化レシピ

WORK RECIPE Python

PythonでZIPを展開せず内容名と圧縮前サイズを確認する

受け取ったZIPを展開する前に、含まれる名前と容量を一覧表示します。展開先への書き込みを行わず、相対パス逸脱に見える名前や大容量の項目を確認するための第一段階です。

掲載コード実行確認

確認日時: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を参照できます。

できあがるもの

項目名と2種類のサイズが表示され、ディスクへ展開ファイルを作らない想定。ZIPの破損検査やマルウェア判定は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

始める前に

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

自分で作成したsample.zipにmemo.txtとdocs/note.txtを入れる。小さな架空テキストだけを使い、未知のZIPはまだ開かない。

手順

  1. 検証用sample.zipを新規フォルダへコピーする。実行前にZIP自体のサイズも確認する。この例は安全性を証明する検査ではなく、一覧確認だけであることを前提にする。
  2. 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python from pathlib import Path, PurePosixPath from zipfile import ZipFile with ZipFile(Path('sample.zip')) as archive: for info in archive.infolist(): name = info.filename.replace('\\', '/') parts = PurePosixPath(name).parts suspicious = name.startswith('/') or '..' in parts or ':' in name mark = 'CHECK_PATH' if suspicious else 'REVIEW' print(mark, repr(info.filename), info.file_size, info.compress_size) ```
  3. ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
  4. 画面でmemo.txtとdocs/note.txtの2項目が出ることを確かめる。圧縮前サイズfile_sizeとZIP内サイズcompress_sizeを見比べるが、ここではデータ本文を解凍しない。出力にCHECK_PATHがあれば業務用の展開処理へ進めず提供元へ確認する。

期待結果と照合する

項目名と2種類のサイズが表示され、ディスクへ展開ファイルを作らない想定。ZIPの破損検査やマルウェア判定は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

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

うまくいかないとき

  • CHECK_PATHがないことは安全の証明ではない。OS固有の予約名、暗号化、巨大アーカイブ等の確認は別に必要。
  • 圧縮前サイズだけを見て無制限に展開しない。件数・合計容量・展開先制限を別途設計する。

止める・元に戻す

プログラムを終了する。ZIPは読み取りのみなので元のまま。検証用コピーだけを不要時に削除する。

公式資料・対応範囲

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

同じツールで試す

Pythonの記事一覧へ →