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くらい超えないと使ってもおいしくない。手段と目的を混同させてはいけないからね。