Поток большого файла с URL прямо в файл gzip - PullRequest
1 голос
/ 19 сентября 2019

Я хочу направить большой файл в файл gzip напрямую, вместо того, чтобы загружать его в память и затем сжимать.Это, как далеко я получил (не работает).Я знаю, как просто загрузить файл в Python и сохранить его, и я знаю, как сжать его, это потоковая часть, которая не работает.

Примечание: этот связанный CSV не большой, это всего лишь примерURL.

    import requests
    import zlib

    url = f"http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv"

    with requests.get(url, stream=True) as r:
        compressor = zlib.compressobj()
        with open(save_file_path, 'wb') as f:
            f.write(compressor.compress(r.raw))

1 Ответ

0 голосов
/ 19 сентября 2019

Хорошо, я понял это:

with requests.get(url, stream=True, verify=False) as r:
    if save_file_path.endswith('gz'):
        compressor = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16)
        with open(save_file_path, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024*1024):
                f.write(compressor.compress(chunk))
            f.write(compressor.flush())
    else:
        with open(save_file_path, 'wb') as f:
            shutil.copyfileobj(r.raw, f)
...