Python|ファイルを圧縮・解凍する

1. はじめに

Pythonには、標準ライブラリだけでファイルの圧縮・解凍を簡単に行える便利な機能が備わっています。ZIP形式をはじめ、さまざまな形式のファイルをPythonで取り扱うことで、バックアップやログ管理、自動処理の効率化が可能になります。

本記事では、Python初心者〜中級者の方向けに、zipfileモジュールやshutilモジュールを使ったファイル圧縮・解凍方法を、コード例と実行結果を交えてわかりやすく解説します。

 

2. Pythonでファイルを圧縮・解凍する基本

2-1. zipfileモジュールとは?

Pythonの標準ライブラリであるzipfileモジュールは、ZIPファイルの読み書きを行うための機能が詰まったモジュールです。これを使えば、わざわざ外部ライブラリをインストールせずに、ファイルの圧縮や解凍を行うことができます。

2-2. ファイルをZIP圧縮する方法

import zipfile

# 圧縮対象のファイルと圧縮後のZIPファイル名
file_to_zip = 'sample.txt'
zip_file_name = 'sample.zip'

# ZIPファイルを作成し、ファイルを圧縮
with zipfile.ZipFile(zip_file_name, 'w') as zipf:
    zipf.write(file_to_zip)
    print(f"{file_to_zip} を {zip_file_name} に圧縮しました")

実行結果:

sample.txt を sample.zip に圧縮しました

2-3. ZIPファイルを解凍する方法

import zipfile

# 解凍するZIPファイル
zip_file_name = 'sample.zip'
# 解凍先ディレクトリ
extract_dir = 'extracted_files'

# ZIPファイルを解凍
with zipfile.ZipFile(zip_file_name, 'r') as zipf:
    zipf.extractall(extract_dir)
    print(f"{zip_file_name} を {extract_dir} に解凍しました")

実行結果:

sample.zip を extracted_files に解凍しました

 

3. よくある使い方・応用例

3-1. 複数ファイルをまとめてZIP圧縮する

import zipfile

files_to_zip = ['sample1.txt', 'sample2.txt', 'sample3.txt']
zip_file_name = 'archive.zip'

with zipfile.ZipFile(zip_file_name, 'w') as zipf:
    for file in files_to_zip:
        zipf.write(file)
        print(f"{file} を圧縮しました")

print(f"{zip_file_name} が作成されました")

実行結果:

sample1.txt を圧縮しました  
sample2.txt を圧縮しました  
sample3.txt を圧縮しました  
archive.zip が作成されました

3-2. shutilモジュールを使った圧縮(ZIP以外)

import shutil

# フォルダごとZIP形式で圧縮
shutil.make_archive('my_folder_backup', 'zip', 'my_folder')

実行結果:

my_folder_backup.zip が作成されました

 

4. 注意点・エラー対策

4-1. ファイルが存在しない場合の対策

import os

if os.path.exists('sample.txt'):
    print("ファイルが存在します")
else:
    print("ファイルが見つかりません")

4-2. 同名ファイルの上書きに注意

圧縮する際、既に同名のZIPファイルがあると上書きされます。必要であればバックアップを取ってから作業しましょう。

4-3. extractall()のセキュリティリスク

extractall()はZIP内のパスも展開するため、意図しないファイル配置(Zip Slip)に注意が必要です。信頼できるZIPファイル以外では使用を避けましょう。

 

5. まとめ

本記事では、Pythonでファイルを圧縮・解凍する方法について、以下の内容を解説しました。

  • zipfileモジュールでファイルをZIP圧縮・解凍する基本操作
  • shutilモジュールによるディレクトリ圧縮
  • 複数ファイルやフォルダの応用例
  • エラー対策と注意点

Pythonでファイル操作を自動化することで、定期バックアップやログ管理を効率化できます。実務や学習の中で、ぜひこの知識を活かしてみてください。

タイトルとURLをコピーしました