@vlatek
Digital Nomad

Как запаковать датафрейм в zip архив содержаший несколько csv файлов?

Есть датафрейм, допустим на 1 млн строк, нужно сохранить результат в один zip архив, содержащий 100 csv файлов, в каждом по 10к строк. Реализовал с pandas такую функцию, которая делит датафрейм на эти файлы, но архивирует каждый отдельно

def result_writer(data):
        chunk_size = 10000 #по сколько строк делить файл
        counter = 0
        for chunk in pd.read_csv(data, chunksize=chunk_size):
            counter = counter + 1
            chunk.to_csv(f'file_{str(counter)}.csv.gz',compression='gzip',index=False)

Как подправить, чтобы у меня получился один zip архив, а не сто?
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
Формат ZIP поддерживает стриминг данных файлов. Нужно просто для каждого CSV сначала генерировать заголовок, а затем отдавать строчку с данными генератору CSV. Тот, в свою очередь, должен заполнять буфер для стриминга Deflate.

Не нужно путать GZip и ZIP. Это совершенно разные форматы. ZIP - это контейнер (архив) для множества файлов и поддерживает различные виды сжатия. А GZip представляет из себя формат для стриминга лишь одного файла.
Ответ написан
Комментировать
@pfg21
ex-турист
если тебе нужен архив zip то его и используй.
gzip это другое, это чисто компрессор содержит только "один файл"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы