Guest User

manga mass-renaming script

a guest
Jul 5th, 2023
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.24 KB | Software | 0 0
  1. import os
  2. import sys
  3. import re
  4. import argparse
  5.  
  6. parser = argparse.ArgumentParser()
  7. parser.add_argument('-n', dest='name', help='name of the manga')
  8. parser.add_argument('--prompt', action='store_true', help='prompt for each filename update confirmation')
  9. args = parser.parse_args()
  10.  
  11. # Regex blocks
  12. if args.name is not None:
  13.     re_named_full = r'^'+args.name+' [0-9]{2,4}' # regex for 'full' chapter, with name
  14.     re_named_half = r'^'+args.name+' [0-9]{2,4}.[0-9]{1}' # regex for 'half' chapter (e.g. 12.5), with name
  15. re_noname_full = r'^[A-Za-z \-!?]* [0-9]{2,4} '
  16. re_noname_half = r'^[A-Za-z \-!?]* [0-9]{2,4}.[0-9]{1,2} '
  17. re_noname_already_valid_full = r'^[A-Za-z \-!?]*[0-9]{2,4}.cbz$'
  18. re_noname_already_valid_half = r'^[A-Za-z \-!?]*[0-9]{2,4}.[0-9]{1,2}.cbz$'
  19.  
  20. if args.name is None:
  21.     print('No name supplied via args. Attempting automatic name detection...')
  22.  
  23. #using os.listdir and os.rename to make files ready for manga server
  24. files = os.listdir('./')
  25. for f in files:
  26.  
  27.     if f == 'rename.py': # skip the script file
  28.         continue
  29.  
  30.     # Make .zip files into .cbz
  31.     if re.search(r'.zip$', f):
  32.         filename = f[:-4] + '.cbz'
  33.         os.rename(f, filename)
  34.         f = filename
  35.  
  36.     # Remove any tags in square brackets
  37.     filename = re.sub('\[.*\]', '', f)
  38.     if filename is not f:
  39.         os.rename(f, filename)
  40.         f = filename
  41.  
  42.     # Replace underscores with spaces
  43.     filename = f.replace('_', ' ')
  44.     if filename is not f:
  45.         os.rename(f, filename)
  46.         f = filename
  47.  
  48.     # Expand any single, standalone numbers into 2-digit numbers for name inclusion
  49.     if re.search(r' [0-9] ', f, 1):
  50.         number = re.search(r' [0-9] ', f, 1).group().strip()
  51.         filename = filename.replace(' '+number+' ', ' 0'+number+' ')
  52.         os.rename(f, filename)
  53.         f = filename
  54.  
  55.     # If the filename already conforms to "<name> <chapter>.cbz", skip
  56.     if args.name is not None:
  57.         if re.search(re_named_full+'.cbz$', f) or re.search(re_named_half+'.cbz$', f):
  58.             continue
  59.     else:
  60.         if re.search(re_noname_already_valid_full, f) or re.search(re_noname_already_valid_half, f):
  61.             continue
  62.  
  63.     # A name was supplied in the arguments (for folders with one series)
  64.     if args.name is not None:
  65.  
  66.         # Check for 'full' chapter substring
  67.         if re.search(re_string_plain+' ', f):
  68.             chapter = re.search(re_named_full+' ', f).group().strip() + '.cbz'
  69.             print('Renaming to: '+chapter)
  70.             if args.prompt:
  71.                 response = input('Proceed with rename? [y/n]: ')
  72.                 if response == 'n' or response == 'N':
  73.                     continue
  74.             os.rename(f, chapter)
  75.         # Check for 'half' chapter substring
  76.         elif re.search(re_string_halfchapter+' ', f):
  77.             chapter = re.search(re_named_half+' ', f).group().strip() + '.cbz'
  78.             print('Renaming to: '+chapter)
  79.             if args.prompt:
  80.                 response = input('Proceed with rename? [y/n]: ')
  81.                 if response == 'n' or response == 'N':
  82.                     continue
  83.             os.rename(f, chapter)
  84.  
  85.     # A name was not supplied in the arguments (for folders with multiple series/ oneshots)
  86.     else:
  87.         name = re.search(re_noname_full, f)
  88.         if name is None:
  89.             name = re.search(re_noname_half, f)
  90.             if name is None:
  91.  
  92.                 # Offer manual renaming
  93.                 print('Name detection failed for: '+f)
  94.                 if args.prompt:
  95.                     response = input('Manually rename? [y/n]:')
  96.                     if response == 'y' or response == 'Y':
  97.                         name = input('Enter filename: ')
  98.                         if '.cbz' not in name:
  99.                             name += '.cbz'
  100.                         os.rename(f, name)
  101.                         continue
  102.                 else:
  103.                     continue
  104.         if name is not None:
  105.             filename = name.group().strip() + '.cbz'
  106.             print('Name detected: ' + filename)
  107.             if args.prompt:
  108.                 response = input('Proceed with rename? [y/n]: ')
  109.                 if response == 'n' or response == 'N':
  110.                     continue
  111.             os.rename(f, filename)
  112.  
Advertisement
Add Comment
Please, Sign In to add comment