Zrobiłem skrypt do organizowania torrentów. Pobieram programy telewizyjne, a następnie przenoszę pliki na inny dysk do folderu takiego jak / nazwa serii / sezon xx /. Działało z niektórymi problemami, dopóki nie dodałem kilku „if”. Widziałem problem z rozróżnianiem wielkości liter. Na przykład, jeśli pobiorę plik mr robot.mkv i folder Mr Robot już istniał, utworzy się inny folder jako mr robot. Zrobiłem to samo z sezonem, aby nie podwoić sezonu, jeśli sezon już istnieje. Najwyraźniej mój skrypt nieustannie próbuje utworzyć folder i nie rozumiem dlaczego.
#!/usr/bin/env python3
import sys, glob, re, os, shutil
from termcolor import colored
#enconding: utf-8
dir_series = "/home/user/series/series/"
buscar = "*[sS][0-9][0-9]*"
series = [s for s in glob.glob(buscar) if s.endswith(('.mp4', '.srt', '.avi', '.mkv'))]
if series:
arch_encontrados = len(series)
print(colored("\nArchivos encontrados:",'red', attrs=['bold'] ), colored(arch_encontrados, 'red', attrs=['bold'] ),'\n')
print(*series, sep = "\n")
for serie in series:
#Extraer el nombre de la serie
nombre = re.findall(r'.*[\. ][sS]\d', serie)[0]
nombre_final = re.sub(r'[\. ][sS]\d','',nombre).replace('.',' ')
#Extraer el número de la temporada
season = re.findall(r'[\. ][sS]\d\d', serie)[0]
season_final_numero = re.sub(r'[\. ][sS]','',season)
season_final = ('Season ' + season_final_numero)
#Armar el directorio final
for series_path in os.listdir(dir_series): #lista el contenido de /home/user/series/series/
if nombre_final.lower() == series_path.lower(): #compara el listado con la salida del nombre de la serie sin importar mayúsculas y minúsculas
for season_path in os.listdir(dir_series + series_path):
if season_final == season_path: #compara el listado de seasons contra season_final que tiene mayuscula
path = os.path.join(dir_series, series_path, season_final)
print(path)
else:
path = os.path.join(dir_series, series_path, 'season ', season_final_numero)
else:
print(colored("\n\n*****************************************",'cyan', attrs=['bold']))
print(colored("** Directorio no encontrado, creándolo **",'cyan', attrs=['bold']))
print(colored("*****************************************\n",'cyan', attrs=['bold']))
path = os.path.join(dir_series, nombre_final, season_final)
print(path)
os.makedirs(path)
#Mover el archivo
print(colored('\nCopiando','green'), serie, colored('a', 'green'), path + '/' + serie)
shutil.move(serie,path)
else:
print(colored('\nNo hay archivos para organizar.','green', attrs=['bold']))
input(colored("\n\nPresione Enter para continuar ...", attrs=['blink', 'bold']))
1 odpowiedź
Nie widzę nieskończonej pętli, ale myślę, że widzę błąd, który powoduje, że ten sam katalog jest tworzony wiele razy.
Wołasz os.makedirs
w innym miejscu swojej wewnętrznej pętli for, co oznacza, że utworzysz ten sam katalog raz dla każdego pliku w os.listdir(dir_series)
, który NIE pasuje do nombre_final.lower()
.
Myślę, że problem może po prostu polegać na tym, że Ty (lub Twoje IDE) przypadkowo wciąłeś wywołanie os.makedirs(path)
o dwa poziomy zbyt głęboko, kiedy dodałeś if / else. Myślę, że musi całkowicie znajdować się poza wewnętrzną pętlą.
Prawdopodobnie musisz również dodać break
w przypadku, gdy pasuje, a może także strażnik, aby uniemożliwić mu tworzenie nowego katalogu w przypadku znalezienia dopasowania?
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.