Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import re
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('-n', dest='name', help='name of the manga')
- parser.add_argument('--prompt', action='store_true', help='prompt for each filename update confirmation')
- args = parser.parse_args()
- # Regex blocks
- if args.name is not None:
- re_named_full = r'^'+args.name+' [0-9]{2,4}' # regex for 'full' chapter, with name
- re_named_half = r'^'+args.name+' [0-9]{2,4}.[0-9]{1}' # regex for 'half' chapter (e.g. 12.5), with name
- re_noname_full = r'^[A-Za-z \-!?]* [0-9]{2,4} '
- re_noname_half = r'^[A-Za-z \-!?]* [0-9]{2,4}.[0-9]{1,2} '
- re_noname_already_valid_full = r'^[A-Za-z \-!?]*[0-9]{2,4}.cbz$'
- re_noname_already_valid_half = r'^[A-Za-z \-!?]*[0-9]{2,4}.[0-9]{1,2}.cbz$'
- if args.name is None:
- print('No name supplied via args. Attempting automatic name detection...')
- #using os.listdir and os.rename to make files ready for manga server
- files = os.listdir('./')
- for f in files:
- if f == 'rename.py': # skip the script file
- continue
- # Make .zip files into .cbz
- if re.search(r'.zip$', f):
- filename = f[:-4] + '.cbz'
- os.rename(f, filename)
- f = filename
- # Remove any tags in square brackets
- filename = re.sub('\[.*\]', '', f)
- if filename is not f:
- os.rename(f, filename)
- f = filename
- # Replace underscores with spaces
- filename = f.replace('_', ' ')
- if filename is not f:
- os.rename(f, filename)
- f = filename
- # Expand any single, standalone numbers into 2-digit numbers for name inclusion
- if re.search(r' [0-9] ', f, 1):
- number = re.search(r' [0-9] ', f, 1).group().strip()
- filename = filename.replace(' '+number+' ', ' 0'+number+' ')
- os.rename(f, filename)
- f = filename
- # If the filename already conforms to "<name> <chapter>.cbz", skip
- if args.name is not None:
- if re.search(re_named_full+'.cbz$', f) or re.search(re_named_half+'.cbz$', f):
- continue
- else:
- if re.search(re_noname_already_valid_full, f) or re.search(re_noname_already_valid_half, f):
- continue
- # A name was supplied in the arguments (for folders with one series)
- if args.name is not None:
- # Check for 'full' chapter substring
- if re.search(re_string_plain+' ', f):
- chapter = re.search(re_named_full+' ', f).group().strip() + '.cbz'
- print('Renaming to: '+chapter)
- if args.prompt:
- response = input('Proceed with rename? [y/n]: ')
- if response == 'n' or response == 'N':
- continue
- os.rename(f, chapter)
- # Check for 'half' chapter substring
- elif re.search(re_string_halfchapter+' ', f):
- chapter = re.search(re_named_half+' ', f).group().strip() + '.cbz'
- print('Renaming to: '+chapter)
- if args.prompt:
- response = input('Proceed with rename? [y/n]: ')
- if response == 'n' or response == 'N':
- continue
- os.rename(f, chapter)
- # A name was not supplied in the arguments (for folders with multiple series/ oneshots)
- else:
- name = re.search(re_noname_full, f)
- if name is None:
- name = re.search(re_noname_half, f)
- if name is None:
- # Offer manual renaming
- print('Name detection failed for: '+f)
- if args.prompt:
- response = input('Manually rename? [y/n]:')
- if response == 'y' or response == 'Y':
- name = input('Enter filename: ')
- if '.cbz' not in name:
- name += '.cbz'
- os.rename(f, name)
- continue
- else:
- continue
- if name is not None:
- filename = name.group().strip() + '.cbz'
- print('Name detected: ' + filename)
- if args.prompt:
- response = input('Proceed with rename? [y/n]: ')
- if response == 'n' or response == 'N':
- continue
- os.rename(f, filename)
Advertisement
Add Comment
Please, Sign In to add comment