Advertisement
Guest User

calibre command line convert books script

a guest
Apr 2nd, 2023
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.91 KB | Software | 0 0
  1. from datetime import datetime
  2. import glob
  3. import re
  4. import shutil
  5. import subprocess
  6. import time
  7. import os
  8. import sys
  9.  
  10.  
  11. def generate_unique_string():
  12.     now = datetime.now()
  13.     dt_string = str(now.strftime("%Y-%m-%d_%H-%M-%S-%f"))
  14.     return dt_string
  15.  
  16.  
  17. def create_dir(dir_loc):
  18.     if os.path.isdir(dir_loc):
  19.         pass
  20.     else:
  21.         os.mkdir(dir_loc)
  22.  
  23.  
  24. def list_for_files(folder_loc, filter_string='*'):
  25.     files_filtered = []
  26.     files = glob.glob(folder_loc + os.sep + filter_string)
  27.     for file in files:
  28.         if os.path.isfile(file):
  29.             files_filtered.append(file)
  30.     files_filtered.sort()
  31.     return files_filtered
  32.  
  33.  
  34. def merge_files(extension, merge_dir, merge_name):
  35.     read_files = glob.glob(merge_dir + os.sep + '*.' + extension)
  36.     with open(merge_dir + os.sep + merge_name + '.' + extension, "wb") as outfile:
  37.         for f in read_files:
  38.             if os.path.isfile(f):
  39.                 with open(f, "rb") as infile:
  40.                     outfile.write(infile.read())
  41.  
  42.  
  43. def list_desktop(prefix):
  44.     desktop_dir = os.path.join(os.environ['USERPROFILE'], 'Desktop')
  45.     list_dir = os.listdir(desktop_dir)
  46.     f_names = [string for string in list_dir if re.search('^' + prefix + '.*exe$', string)]
  47.     if len(f_names) > 0:
  48.         return desktop_dir, f_names[0]
  49.     else:
  50.         print('error, calibre portable exe file not found')
  51.  
  52.  
  53. def setup_carlibre():
  54.     # unpack portable installer
  55.     desktop_dir, file_name = list_desktop('calibre-portable')
  56.     converter_loc = desktop_dir + '\calibre\Calibre Portable\Calibre\ebook-convert.exe'
  57.     if os.path.isfile(converter_loc):
  58.         print('ebook-convert.exe present and ready to go...')
  59.     else:
  60.         os.chdir(desktop_dir)
  61.         os.system(file_name + ' calibre')
  62.     # setup input & output directories:
  63.     input_dir = desktop_dir + '\calibre\input'
  64.     create_dir(input_dir)
  65.     done_dir = desktop_dir + '\calibre\input\done'
  66.     create_dir(done_dir)
  67.     output_dir = desktop_dir + '\calibre\output'
  68.     create_dir(output_dir)
  69.     return converter_loc, input_dir, done_dir, output_dir
  70.  
  71.  
  72. def convert_files(convert_ext):
  73.     converter_loc, input_dir, done_dir, output_dir = setup_carlibre()
  74.     unique_string = generate_unique_string()
  75.     output_dir = output_dir + os.sep + unique_string
  76.     move_dir = done_dir + os.sep + unique_string
  77.     input_files = list_for_files(input_dir)
  78.     if len(input_files) > 0:
  79.         for index, tmp_in in enumerate(input_files):
  80.             file_name, file_ext = os.path.splitext(os.path.basename(tmp_in))
  81.             print('converting file: ' + str(index+1) + ' / ' + str(len(input_files)) + ',\t' + file_name)
  82.             create_dir(output_dir)
  83.             out_loc = output_dir + os.sep + file_name + '.' + convert_ext
  84.             create_dir(move_dir)
  85.             move_loc = move_dir + os.sep + file_name + file_ext
  86.             cmd = '"' + converter_loc + '" "' + tmp_in + '" "' + out_loc + '"'
  87.             # print(cmd)
  88.             response = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read().decode(
  89.                 'utf-8').splitlines()
  90.             # print(response)
  91.             shutil.move(tmp_in, move_loc)
  92.         print('merging files into one:' + '\n' + output_dir + os.sep + unique_string + '.' + convert_ext)
  93.         merge_files(convert_ext, output_dir, unique_string)
  94.         print('process done, exiting...')
  95.         time.sleep(5)
  96.     else:
  97.         print('error, copy some files into the "input" directory" and run it again...')
  98.         time.sleep(5)
  99.  
  100.  
  101. def run_code():
  102.     if len(sys.argv) == 1:
  103.         print('error, type "txt" or similar extension as an argument, example:')
  104.         print('"' + sys.argv[0] + '" txt')
  105.         time.sleep(5)
  106.     elif len(sys.argv) == 2:
  107.         convert_files(sys.argv[1])
  108.     else:
  109.         print('error, more than 1 argument given')
  110.         time.sleep(5)
  111.  
  112.  
  113. if __name__ == '__main__':
  114.     run_code()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement