Cbr to Cbz Converter
As I continue to go through and find old stuff that I’d done, I found this one. I wrote this simple script a while back to convert some digital comic books into a format that I could read on my Kindle e-reader.
Download Source File:
#!/usr/bin/env python
# Author: Jon Robbins
# License: GPL3+
# based on the idea from https://trisquel.info/en/wiki/how-convert-comic-book-archives-cbrcbr-cbz
#
# This script recursively loops through directories below a starting point and converts all cbr file to cbz files
#
# requires:
# - unrar
# - zip/unzip
#
# gist: https://gist.github.com/jfrobbins/442a27f798219f78b3da
#
import os
import zipfile
from subprocess import call
import shutil
#DELETE_CBR_FILES = False
DELETE_CBR_FILES = True
def ensure_dir(f):
d = os.path.dirname(f)
print('dir:', d)
if not os.path.exists(d):
os.makedirs(d)
print('created directory')
else:
print("dir exists")
return d
def make_zipfile(output_filename, source_dir):
relroot = os.path.abspath(os.path.join(source_dir, os.pardir))
with zipfile.ZipFile(output_filename, "w", zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(source_dir):
# add directory (needed for empty dirs)
zipf.write(root, os.path.relpath(root, relroot))
for file in files:
filename = os.path.join(root, file)
if os.path.isfile(filename): # regular files only
arcname = os.path.join(os.path.relpath(root, relroot), file)
zipf.write(filename, arcname)
def buildFileList(path):
list_of_files = []
path = os.path.abspath(path)
for (dirpath, dirnames, filenames) in os.walk(path):
for filename in filenames:
if filename[-4:] == '.cbr':
list_of_files.append(os.sep.join([dirpath, filename]))
return list_of_files
if __name__ == '__main__':
list_of_files = buildFileList("./")
for f in list_of_files:
print("converting file: " + f)
tmpdir = os.path.join(os.path.dirname(f), f[:-4]) + os.path.sep
print("tmpdir: ",tmpdir)
outfile = os.path.dirname(tmpdir) + '.cbz'
ensure_dir(tmpdir) #create a tmp dir
print("tmp dir created: ", tmpdir)
print("unraring")
call(["unrar", "x", f, tmpdir]) #unrar the file
print("zipping the temp directory to file:", outfile)
#call(['zip','-r',os.path.dirname(tmpdir) + '.cbz', tmpdir])
make_zipfile(outfile, tmpdir)
print("deleting the tmp directory")
shutil.rmtree(tmpdir)
if DELETE_CBR_FILES and os.path.isfile(outfile):
print("deleting original cbr file: ", f)
os.remove(f)
print("done converting files")