75 lines
1.8 KiB
Plaintext
75 lines
1.8 KiB
Plaintext
|
#!/usr/bin/env python3
|
||
|
|
||
|
"""
|
||
|
Will break apart large files into smaller files
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import time
|
||
|
|
||
|
|
||
|
def parse_args():
|
||
|
argp = argparse.ArgumentParser(
|
||
|
description="Will break a large file into smaller files"
|
||
|
)
|
||
|
|
||
|
argp.add_argument(
|
||
|
'large_file',
|
||
|
help="Full path for large file"
|
||
|
)
|
||
|
|
||
|
argp.add_argument(
|
||
|
'--prefix', '-p',
|
||
|
default='small',
|
||
|
help="Prefix for the smaller files (default: %(default)s)"
|
||
|
)
|
||
|
|
||
|
argp.add_argument(
|
||
|
'--extension', '-x',
|
||
|
default='txt',
|
||
|
help="Extension for the smaller files (default: %(default)s)"
|
||
|
)
|
||
|
|
||
|
argp.add_argument(
|
||
|
'-s', '--size',
|
||
|
default='10K',
|
||
|
help="File size limits (5K, 10M, 2G)"
|
||
|
)
|
||
|
|
||
|
return argp.parse_args()
|
||
|
|
||
|
|
||
|
def main():
|
||
|
args = parse_args()
|
||
|
|
||
|
file_count = 0
|
||
|
|
||
|
# get size for chunks
|
||
|
size_value = args.size
|
||
|
size_value_parts = re.match(r'(\d+)([BbKkMmGgTt]?)', size_value).groups()
|
||
|
if size_value_parts[1]:
|
||
|
factor = (
|
||
|
(size_value_parts[1].lower() == 'k' and 1) or
|
||
|
(size_value_parts[1].lower() == 'm' and 2) or
|
||
|
(size_value_parts[1].lower() == 'g' and 3) or
|
||
|
(size_value_parts[1].lower() == 't' and 4)
|
||
|
)
|
||
|
size_limit = int(size_value_parts[0]) * 1024**factor
|
||
|
else:
|
||
|
size_limit - int(size_value_parts[0])
|
||
|
|
||
|
|
||
|
with open(args.large_file) as large_file:
|
||
|
|
||
|
while chunk := large_file.read(size_limit):
|
||
|
file_count = file_count + 1
|
||
|
output_filename = f"{args.prefix}-{file_count}.{args.extension}"
|
||
|
|
||
|
with open(output_filename, 'w') as small_file:
|
||
|
small_file.write(chunk)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|
||
|
|