49 lines
1.7 KiB
Python
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:])
|