Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import datetime
- import glob
- import re
- import shutil
- import subprocess
- import time
- import os
- import sys
- def generate_unique_string():
- now = datetime.now()
- dt_string = str(now.strftime("%Y-%m-%d_%H-%M-%S-%f"))
- return dt_string
- def create_dir(dir_loc):
- if os.path.isdir(dir_loc):
- pass
- else:
- os.mkdir(dir_loc)
- def list_for_files(folder_loc, filter_string='*'):
- files_filtered = []
- files = glob.glob(folder_loc + os.sep + filter_string)
- for file in files:
- if os.path.isfile(file):
- files_filtered.append(file)
- files_filtered.sort()
- return files_filtered
- def merge_files(extension, merge_dir, merge_name):
- read_files = glob.glob(merge_dir + os.sep + '*.' + extension)
- with open(merge_dir + os.sep + merge_name + '.' + extension, "wb") as outfile:
- for f in read_files:
- if os.path.isfile(f):
- with open(f, "rb") as infile:
- outfile.write(infile.read())
- def list_desktop(prefix):
- desktop_dir = os.path.join(os.environ['USERPROFILE'], 'Desktop')
- list_dir = os.listdir(desktop_dir)
- f_names = [string for string in list_dir if re.search('^' + prefix + '.*exe$', string)]
- if len(f_names) > 0:
- return desktop_dir, f_names[0]
- else:
- print('error, calibre portable exe file not found')
- def setup_carlibre():
- # unpack portable installer
- desktop_dir, file_name = list_desktop('calibre-portable')
- converter_loc = desktop_dir + '\calibre\Calibre Portable\Calibre\ebook-convert.exe'
- if os.path.isfile(converter_loc):
- print('ebook-convert.exe present and ready to go...')
- else:
- os.chdir(desktop_dir)
- os.system(file_name + ' calibre')
- # setup input & output directories:
- input_dir = desktop_dir + '\calibre\input'
- create_dir(input_dir)
- done_dir = desktop_dir + '\calibre\input\done'
- create_dir(done_dir)
- output_dir = desktop_dir + '\calibre\output'
- create_dir(output_dir)
- return converter_loc, input_dir, done_dir, output_dir
- def convert_files(convert_ext):
- converter_loc, input_dir, done_dir, output_dir = setup_carlibre()
- unique_string = generate_unique_string()
- output_dir = output_dir + os.sep + unique_string
- move_dir = done_dir + os.sep + unique_string
- input_files = list_for_files(input_dir)
- if len(input_files) > 0:
- for index, tmp_in in enumerate(input_files):
- file_name, file_ext = os.path.splitext(os.path.basename(tmp_in))
- print('converting file: ' + str(index+1) + ' / ' + str(len(input_files)) + ',\t' + file_name)
- create_dir(output_dir)
- out_loc = output_dir + os.sep + file_name + '.' + convert_ext
- create_dir(move_dir)
- move_loc = move_dir + os.sep + file_name + file_ext
- cmd = '"' + converter_loc + '" "' + tmp_in + '" "' + out_loc + '"'
- # print(cmd)
- response = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read().decode(
- 'utf-8').splitlines()
- # print(response)
- shutil.move(tmp_in, move_loc)
- print('merging files into one:' + '\n' + output_dir + os.sep + unique_string + '.' + convert_ext)
- merge_files(convert_ext, output_dir, unique_string)
- print('process done, exiting...')
- time.sleep(5)
- else:
- print('error, copy some files into the "input" directory" and run it again...')
- time.sleep(5)
- def run_code():
- if len(sys.argv) == 1:
- print('error, type "txt" or similar extension as an argument, example:')
- print('"' + sys.argv[0] + '" txt')
- time.sleep(5)
- elif len(sys.argv) == 2:
- convert_files(sys.argv[1])
- else:
- print('error, more than 1 argument given')
- time.sleep(5)
- if __name__ == '__main__':
- run_code()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement