大量の画像を25MB未満のZIPファイルに分けて圧縮していく方法|Yahooショッピング効率化

ひさびさにYahooちゃんとやろうと思ったのですが画像周りが相変わらず面倒

25MB未満のZIPにまとめればある程度一括でUPできるっていう部分について。
フリーソフトもなくなったりしてるので、対処するコードです。

Pythonです。

フォルダ内の画像を25MB未満のZIPにまとめていくコード

import os
import zipfile


folder_path = '圧縮したい画像が入っているフォルダパス'

def create_zip_files(folder_path, zip_size_limit):
    """
    指定されたフォルダ内のすべての画像ファイルを、指定されたサイズ制限をもとに
    ZIPファイルにまとめます。
    :param folder_path: 画像ファイルが格納されているフォルダのパス
    :param zip_size_limit: 1つのZIPファイルに含めることができる最大サイズ(バイト単位)
    """
    file_list = []
    for filename in os.listdir(folder_path):
        if filename.endswith('.jpg') or filename.endswith('.png'):
            file_list.append(os.path.join(folder_path, filename))

    zip_file_count = 1
    current_zip_size = 0
    current_zip_files = []
    for file_path in file_list:
        file_size = os.path.getsize(file_path)
        if current_zip_size + file_size > zip_size_limit:
            # 現在のZIPファイルのサイズ制限を超えた場合は、新しいZIPファイルを作成する
            with zipfile.ZipFile(os.path.join(folder_path, f'yahoo_photos_{zip_file_count}.zip'), 'w') as zip_file:
                for f in current_zip_files:
                    zip_file.write(f, os.path.basename(f))
            current_zip_files = []
            current_zip_size = 0
            zip_file_count += 1

        current_zip_files.append(file_path)
        current_zip_size += file_size

    # 最後に残ったファイルをZIPファイルにまとめる
    with zipfile.ZipFile(os.path.join(folder_path, f'yahoo_photos_{zip_file_count}.zip'), 'w') as zip_file:
        for f in current_zip_files:
            zip_file.write(f, os.path.basename(f))


zip_size_limit = 25 * 1024 * 1024  # 25MB
create_zip_files(folder_path, zip_size_limit)

コードの使い方

圧縮したい画像が入っているフォルダパス のとこに
D:\yahoo みたいなフォルダパスを入れてください。

あとは実行すればOK

jupyterslabとかで実行してください。