Skip to content

Instantly share code, notes, and snippets.

@Godrigos
Last active July 2, 2019 22:47
Show Gist options
  • Save Godrigos/c2eb7c030b03f7c1e019cd5c4cb5c22d to your computer and use it in GitHub Desktop.
Save Godrigos/c2eb7c030b03f7c1e019cd5c4cb5c22d to your computer and use it in GitHub Desktop.
Python 3 script to rename series files in absolute number episode format using TVDB API.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
In order to use this module, mediainfo library needs to be
installed on your system. Visit https://mediaarea.net/en/MediaInfo
for more information, download and installation details.
"""
from tvdb_api import Tvdb, tvdb_shownotfound
from requests.exceptions import ConnectionError
from glob import glob
from re import sub
from os import rename
from os.path import splitext
from pymediainfo import MediaInfo
from sys import exit
files = [file for file in glob('*.*') for track in
MediaInfo.parse(file).tracks if track.track_type == 'Video']
if not files:
print("Permission to read files denied or no video "
"files in the directory!")
exit(0)
n = 0
name = []
for file_name in files:
try:
tvdb = Tvdb(language="en")
name = sub(r"\[.*?\]|\(.*?\)|_|\W|\d|\bEp\b", " ",
splitext(file_name)[0]).strip(" ")
show = tvdb[name]
seasons = [key for key in show for value in show[key]]
episodes = [value for key in show for value in show[key]]
absoluteNumbers = [episode['absoluteNumber'] for season
in show.values() for episode in season.values()]
i = 0
try:
if not sub(r"\[.*?\]|\(.*?\)|\D", '', splitext(file_name)[0]):
print(f'{file_name} can not be renamed!')
else:
for i in range(len(absoluteNumbers)):
if (int(sub(r"\[.*?\]|\(.*?\)|\D", '',
splitext(file_name)[0])) ==
absoluteNumbers[i]):
try:
new_name = (sub(r"[!?:@|</*\"\\>]", '',
show['seriesName']) + " "
+ str(f'S{seasons[i]:02}', )
+ str(f'E{episodes[i]:02}', )
+ splitext(file_name)[1])
rename(file_name, new_name)
n += 1
print(f"{file_name} -> {new_name}")
except PermissionError:
print(f"Cannot write {file_name}, permission "
"denied!\n")
pass
except ValueError:
pass
except tvdb_shownotfound:
print(f"Show {name} not found!")
except ConnectionError:
print("No Internet connection!")
exit(1)
except KeyboardInterrupt:
print("\n")
exit(0)
if n == 0:
print("No files renamed!")
elif n == 1:
print(f"\n{n} file successfully renamed!")
else:
print(f"\n{n} files successfully renamed!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment