Как скачать и открыть только первый блок bzip2 от S3? - PullRequest
0 голосов
/ 14 октября 2019

У меня большой сжатый файл bzip2 на S3, и меня интересует только его первая строка. Как я могу прочитать первые строки, не загружая и не распаковывая весь файл?

1 Ответ

0 голосов
/ 14 октября 2019
import boto3
import io
import bz2

s3 = boto3.resource('s3')

s3_object = s3.Object("bucket-name", "path/file.bz2")
f_bz2 = s3_object.get(Range=f"bytes=0-100000")["Body"].read()
io_bz2 = io.BytesIO(f_bz2)

lines = []
with bz2.BZ2File(io_bz2, "r") as f:
    while True:
        lines.append(f.readline())

Размер блока сжатия для bzip2 составляет от 100 до 900 КБ. Код выше предполагает 100 КБ.

В конце выдается исключение:

EOFError: Compressed file ended before the end-of-stream marker was reached
...