| import os | |
| import zipfile | |
| def split_zip(input_zip, output_dir, max_size=5 * 1024**3): # 5GB | |
| if not os.path.exists(output_dir): | |
| os.makedirs(output_dir) | |
| part = 1 | |
| current_size = 0 | |
| prefix_name = input_zip.split(".")[0] | |
| output_zip = zipfile.ZipFile(os.path.join(output_dir, f"{prefix_name}_part_{part}.zip"), "w", zipfile.ZIP_DEFLATED) | |
| with zipfile.ZipFile(input_zip, "r") as zip_ref: | |
| for file in zip_ref.namelist(): | |
| file_data = zip_ref.read(file) | |
| file_size = len(file_data) | |
| if current_size + file_size > max_size: | |
| output_zip.close() | |
| part += 1 | |
| current_size = 0 | |
| output_zip = zipfile.ZipFile(os.path.join(output_dir, f"{prefix_name}_part_{part}.zip"), "w", zipfile.ZIP_DEFLATED) | |
| output_zip.writestr(file, file_data) | |
| current_size += file_size | |
| output_zip.close() | |
| # Usage | |
| split_zip("Charades_v1_480.zip", "split_zips") | |