Pythonプログラミング:bz2 fileを解凍しながらダウンロード

大容量の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/

スポンサーリンク