アクサンの場合

Python3初心者が段々上達するログ

Python3 たくさんのファイルをn個ずつZipする

目的

たくさんのテキストファイルを幾つかの束にしてZipにする

入力:たくさんのテキストファイ
出力:指定の数だけ束になったZipファイル

方法

まず、ファイルのディレクトリ構造付きで列挙したテキストファイルを用意する。 そして、1行ずつ読み込んでリストに。

file_list = ["./data/1.txt", "./data/2.txt", ..]

こんな感じ。肝はこれをn個ずつサブリストに分割すること。

ここが実に分かりやすかった。 リストをn個ずつのサブリストに分割 (Python) - おぎろぐはてブロ

分割するのはいいけれど、余った(10個ずつっていうときに最後が3つしかない)場合捨てられてしまうことがあったことに気をつけたい。

使えたのが

import itertools
splitsize = 1000
for a in itertools.zip_longest(*[iter(file_list)* splitsize]
    # execute

そして、for毎にZIPにするわけだが、これは標準装備であるので助かった。

import zipfile

zipFile = zipfile.ZipFile("./1.zip", "s", zipfile.ZIP_DEFLATED)
zipFile.write("./data/1.txt")
.
.
.

こんな具合だ。このZIPファイルにも連番をつけたいならば、for毎に1を加算して・・・という方法が良いだろう。ZIPが何個になるかなんて予想はたつけど無理があるので。

組み合わせればもう完璧にできる。放っておけばZIPになってるなんてさすがって感じですね。あとGUIで余裕で動くフォルダサイズの場合は、こんなん書くより速いと思う。大体GUIが動かねえっていう2GBくらい超えないと使ってもおいしくない。手段と目的を混同させてはいけないからね。