python - Python循环未完成
问题描述
我制作了一个用于组织种子的脚本。我下载电视节目,然后将文件移动到另一个磁盘到 /series name/season xx/ 之类的文件夹中,它一直在解决一些问题,直到我添加了几个 ifs。我看到了区分大小写的问题。例如,如果我下载 mr robot.mkv 并且文件夹 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']))
解决方案
我没有看到无限循环,但我认为我确实看到了一个导致同一目录多次生成的错误。
您正在调用os.makedirs
内部 for 循环的 else ,这意味着您将为os.listdir(dir_series)
不匹配的每个文件创建一次相同的目录nombre_final.lower()
。
我认为问题可能只是您(或您的 IDE)os.makedirs(path)
在添加 if/else 时不小心将调用缩进了两层太深。我认为它需要完全在内部循环之外。
您可能还需要在匹配的情况下添加 a break
,并且可能还需要在发现匹配的情况下阻止它创建新目录的警卫?
推荐阅读
- excel - 根据从另一个工作表中选择的值取消隐藏工作表中的列
- r - 如何在多行上导入带有 qoutations 的 csv 文件?
- azure - API 请求的正确范围是什么
- r - 正则表达式:匹配多个模式并获取字符串的中间
- c# - 如何使用正确的嵌入字体显示 PDF 文本
- java - 我们是否可以保证显示的堆栈跟踪以及给定线程的标头描述(在线程转储中)始终是一致的?
- python - Python:WantReadError 的 Tweepy 中未捕获异常
- html - 如何修复带有圆角的 HTML 表格上的间隙?
- python - 如何根据基于数据框的两个或多个条件在 MultiIndex 数据框中添加新行
- shiro - 如何防止用户在 Zeppelin 中显示 shiro.ini 文件的内容