Skip to content

Instantly share code, notes, and snippets.

@kieranjol
Created October 30, 2019 14:44
Show Gist options
  • Save kieranjol/d580af96298d7c4a866567735f9abc3b to your computer and use it in GitHub Desktop.
Save kieranjol/d580af96298d7c4a866567735f9abc3b to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import sys
import subprocess
import datetime
import csv
import os
def create_csv(csv_file, *args):
f = open(csv_file, 'w')
try:
writer = csv.writer(f)
writer.writerow(*args)
finally:
f.close()
def append_csv(csv_file, *args):
f = open(csv_file, 'a')
try:
writer = csv.writer(f)
writer.writerow(*args)
finally:
f.close()
def get_folder_size(folder):
'''
Get the size fo all files in a folder. Recursive process.
https://stackoverflow.com/a/1392549/2188572
'''
total_size = 0
for dirpath, dirnames, filenames in os.walk(folder):
for f in filenames:
fp = os.path.join(dirpath, f)
try:
total_size += os.path.getsize(fp)
except OSError:
continue
return total_size
source = sys.argv[1]
destination = sys.argv[2]
folder_size = get_folder_size(source)
csv_report_filename = os.path.basename(source) + "zipbench_report"
csv_report = os.path.expanduser("~/Desktop/%s.csv") % csv_report_filename
create_csv(
csv_report,
(
'compression_type',
'compression_level',
'duration_seconds',
'source_folder_size',
'zip_file_size',
'compression_ratio',
)
)
pwd = os.getcwd()
compression_types = ['LZMA', 'Deflate', 'Copy']
compression_levels = ['3', '5']
os.chdir(os.path.dirname(source))
for compression_type in compression_types:
for compression_level in compression_levels:
zip_start = datetime.datetime.now()
full_zip = os.path.join(destination, '%s_%s' % (compression_type, compression_level[-1]))
compression_type_string = '-mm=%s' % compression_type
compression_level_string = '-mx=%s' % compression_level
zip_cmd = ['7za', 'a', '-tzip', compression_type_string, compression_level_string, full_zip, os.path.basename(source)]
print(zip_cmd)
subprocess.call(zip_cmd)
zip_end = datetime.datetime.now()
append_csv(
csv_report,
(
compression_type,
compression_level,
zip_end - zip_start,
folder_size,
os.path.getsize(full_zip + '.zip'),
os.path.getsize(full_zip + '.zip') / folder_size,
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment