Add split_by_size_or_qty_and_compress.py

This commit is contained in:
2024-05-12 03:22:11 +02:00
commit 472bd318df

View File

@@ -0,0 +1,53 @@
import fnmatch
import os
import zipfile
###
BYTE_SIZE_LIMIT = 22144
QUANTITY_LIMIT = 10
dir = os.listdir(os.getcwd())
files_list = fnmatch.filter((dir),'*.xml')
###
def compress(file_names, zip_name):
compression = zipfile.ZIP_DEFLATED
zf = zipfile.ZipFile(zip_name, mode="w")
try:
for file_name in file_names:
zf.write(file_name, compress_type=compression)
except FileNotFoundError:
print("An error occurred")
finally:
zf.close()
def split_by_size_or_qty_and_compress(files, size_limit = 1000000000, qty_limit = 100000):
if not (isinstance(files, list)):
raise TypeError("Not a valid file list")
num_files = len(files)
chunk = []
part_num = 1
count = 0
chunk_size = 0
for file in files:
count += 1
chunk_size += os.path.getsize(file)
if(chunk_size > size_limit) or (len(chunk) >= qty_limit):
compress(chunk, "Part_" + str(part_num) + ".zip")
chunk.clear()
chunk_size = 0
part_num +=1
else:
chunk.append(file)
if(count == num_files):
compress(chunk, "Part_" + str(part_num) + ".zip")
split_by_size_or_qty_and_compress(files_list, BYTE_SIZE_LIMIT, QUANTITY_LIMIT)