Время прочтения: 2 мин.

В своей работе часто сталкиваюсь с выгрузкой и обработкой большого объема данных, поэтому приходиться думать о том где хранить и как быстро передать анализируемую информации. Одну из таких задач уже описывал ранее в статье «Сложности при выгрузке 500 гб из базы данных и пример их решения». Но если в ранее описанное решение добавить библиотеку архивации zipfile из Python и сжать данные, то их можно вместить в свободное место на жестком диске исключая перенос на сетевой ресурс или ускорить перемещение за счет уменьшения объема файлов. Для работы с zipfile не требуется что-то дополнительно скачивать, достаточно только подключить.

Пример скрипта:

# Импортируем библиотеки
import zipfile
import os

# Определяем путь к папке с файлами на жестком диске
path_file = r'\Users\ *** \Файлы\ '[:-1]
# Создаем массив имен из файлов csv
list_file = []
for file in os.listdir(path_file):
    if file.endswith(('.csv')):
        list_file.append(file)
list_file
# Создаем ZIP файл и открываем для записи
TempZipFile = zipfile.ZipFile(path_zip + 'NewFile.zip', 'w')
# Сжимаем файлы используя метод сжатия ZIP_DEFLATED
for name_file in list_file:
    TempZipFile.write(path_file + name_file, compress_type = zipfile.ZIP_DEFLATED)

# Закрываем ZIP файл
TempZipFile.close()

Например, 165 файлов в формате csv с общим объемом 224 ГБ удалось сжать в один zip-файл до 20 ГБ за два часа. Копирование на сетевой ресурс 20 ГБ данных, не зависимо от формата zip или csv, при доступной мне скорости передачи, в среднем заняло 15 часов. В итоге сэкономлено 200 ГБ памяти на жестком диске или 166 часов (с учетом затраченного времени на архивацию) при переносе на сетевой ресурс.

Более подробно о работе с стандартной библиотекой zipfile (чтение, извлечение, методы сжатия и др.) можно узнать на сайте docs.python.org по ссылке.