大容量のbz2ファイルをわざわざダウンロードしてから展開するよりも、展開しながら元ファイルを保存した方が手っ取り早いし、例えば、ディスクの空き容量が少ない場合、巨大なbz2ファイルをダウンロードしてから展開すると容量オーバーを起こす可能性もある。
bz2ファイルを展開しながらダウンロード(sequential decompression,逐次展開)するのは非常に簡単で、bz2モジュールのbz2.BZ2Decompressor
を使えばいい。下記のコードは、bz2ファイルをダウンロードしてから展開するよりも若干実行時間が短い(正確には1分55秒)。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import requests import bz2 import os url = 'https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles1.xml-p10p30302.bz2' filename = 'wikidump' r = requests.get(url, stream=True, headers={'User-agent': 'Mozilla/5.0'}) chunk_size = 32 * 1024 decom = bz2.BZ2Decompressor() with open(filename, 'wb') as f: for data in r.iter_content(chunk_size): f.write(decom.decompress(data)) r.close() |
archive fileをdownloadしてから解凍してアーカイブファイルを消去するよりも、巨大ファイルを展開しながらダウンロードした方が、貴重な容量を無駄に消費しないで済む。
参考サイトhttps://stackoverflow.com/スポンサーリンク
スポンサーリンク