Python循环未完成

时间:2019-11-20 18:07:38

标签: python

我制作了一个用于组织种子的脚本。我下载电视节目,然后将文件移至另一个磁盘,然后移至/ series name / season xx / 直到我添加了几个if之前,它一直在处理一些问题。我看到了区分大小写的问题。例如,如果我下载了mr robot.mkv,而Mr Mr Robot已经存在,则它会创建一个与mr robot不同的文件夹。如果季节已经存在,我对季节做了同样的事情,以不加倍改变季节。 显然我的脚本正在尝试连续创建文件夹,但我不知道为什么。

#!/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 个答案:

答案 0 :(得分:1)

我没有看到无限循环,但我认为确实看到了导致同一目录多次创建的错误。

您正在内部for循环的其他位置调用os.makedirs,这意味着您将为os.listdir(dir_series)中与nombre_final.lower()不匹配的每个文件创建相同的目录一次。 / p>

我认为问题可能仅在于您(或您的IDE)在添加if / else时不小心缩进了os.makedirs(path)调用两个级别。我认为它必须完全在内部循环之外。

在匹配的情况下,您可能还需要添加break,在发现匹配的情况下,还可能需要一个防护措施以阻止其创建新目录?