From 472bd318df5acbc9b8572db5ea866d55b3f94e01 Mon Sep 17 00:00:00 2001 From: kamzata Date: Sun, 12 May 2024 03:22:11 +0200 Subject: [PATCH] Add split_by_size_or_qty_and_compress.py --- split_by_size_or_qty_and_compress.py | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 split_by_size_or_qty_and_compress.py diff --git a/split_by_size_or_qty_and_compress.py b/split_by_size_or_qty_and_compress.py new file mode 100644 index 0000000..bd73a07 --- /dev/null +++ b/split_by_size_or_qty_and_compress.py @@ -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) \ No newline at end of file