Files
cbrtocbz/cbrtocbz.py
2021-05-20 02:00:12 -05:00

49 lines
1.7 KiB
Python

import rarfile
import zipfile
import argparse
import tempfile
from sys import argv
from os import curdir, remove, walk
from os.path import splitext, join
from typing import Final
#optionally prints a message if the verbosity level is high enough
def vprint(text, level=0):
if vprint.verbosity >= level:
print(text)
vprint.verbosity = 0
def main(arguments):
parser = argparse.ArgumentParser()
parser.add_argument('-e', '--ext', type=str, help='set output file extension (default "cbr")', default='cbz')
parser.add_argument('-p', '--path', type=str, help='output path', default='.')
parser.add_argument('-d', '--delete', action='store_true', help='delete source file after successful conversion')
parser.add_argument('-v', action='count', help='display additional information')
parser.add_argument('files', nargs='+', type=str)
args = parser.parse_args(arguments)
files: Final = args.files
ext: Final = args.ext.lstrip('.')
delete: Final = args.delete
path: Final = args.path or curdir
for f in files:
with tempfile.TemporaryDirectory() as dir:
vprint('created temp dir ' + dir, 1)
with rarfile.RarFile(f, 'r') as rar:
vprint('extracting ' + f, 1)
rar.extractall(dir)
z_f = join(path, splitext(f)[0] + '.' + ext)
with zipfile.ZipFile(z_f, 'x') as zip:
for dirpath, dirs, fs in walk(dir):
for file in fs:
p = join(dirpath, file)
zip.write(p)
vprint('finished ' + z_f, 0)
if delete:
vprint('deleting ' + f, 0)
remove(f)
if __name__ == '__main__':
main(argv[1:])