Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| import sys | |
| import subprocess | |
| import os.path | |
| args = sys.argv | |
| zstd = "--zstd" in args | |
| gzip = "--gzip" in args | |
| if zstd: args.remove("--zstd") | |
| if gzip: args.remove("--gzip") | |
| if len(args) != 4: | |
| print("Usage: split-image.py [--zstd|--gzip] partsize filename-in filename-out-with-%d-%d") | |
| exit(1) | |
| (_, partsize_raw, infile, outfile) = sys.argv | |
| partsize_raw = partsize_raw.lower() | |
| if partsize_raw.endswith("m") or partsize_raw.endswith("mb"): | |
| partsize_base = 1024 * 1024 | |
| partsize_raw = partsize_raw.removesuffix("mb").removesuffix("m") | |
| elif partsize_raw.endswith("k") or partsize_raw.endswith("k"): | |
| partsize_base = 1024 | |
| partsize_raw = partsize_raw.removesuffix("k").removesuffix("k") | |
| else: | |
| partsize_base = 1 | |
| partsize = partsize_base * int(partsize_raw) | |
| with open(infile, "rb") as f: | |
| readf = f.read() | |
| size = len(readf) | |
| if len(readf) % partsize != 0: | |
| print("Warning: size % partsize != 0") | |
| unit = "B" | |
| if size % 1024 == 0: size //= 1024; unit = "kB" | |
| if size % 1024 == 0: size //= 1024; unit = "mB" | |
| print("Size: %d %s, creating %d chunks" % (size, unit, len(readf) / partsize)) | |
| try: | |
| os.mkdir(os.path.dirname(outfile)) | |
| except FileExistsError: | |
| pass | |
| for i in range(0, len(readf), partsize): | |
| part_name = outfile % (i, i + partsize) | |
| with open(part_name, "wb") as f: | |
| chunk = readf[i:i + partsize] | |
| f.write(chunk) | |
| if len(chunk) < partsize: | |
| # last chunk | |
| f.write(bytes(partsize - len(chunk))) | |
| if zstd: subprocess.run(["zstd", "-19", "-f", "--rm", part_name], check=True) | |
| elif gzip: subprocess.run(["gzip", "-9", "-f", part_name], check=True) | |