Add split_by_size_or_qty_and_compress.py
This commit is contained in:
53
split_by_size_or_qty_and_compress.py
Normal file
53
split_by_size_or_qty_and_compress.py
Normal 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)
|
||||
Reference in New Issue
Block a user