Python - Código que crea un diccionario al llegar a cierto número

Iniciado por 987123564, 14 Agosto 2016, 21:59 PM

0 Miembros y 1 Visitante están viendo este tema.

987123564

Buenas, tengo un programa que analiza el nombre de episodios de pokémon y quiero que al llegar a un cierto episodio añada a un diccionario una clave con el número de la temporada y el valor con una lista de los episodios de esa temporada.
El formato de los episodios es así:

P0k3M0N.1x01.Es.avi.mp4

Tengo este código para que se hagan una idea:
Código (python) [Seleccionar]

import os

files = []

for file in os.listdir("."):
   if "P0k3M0N" in file:
       files.append(file)

with open('last.txt', 'r') as f:
   print("Last one: " + f.readline())

with open('last2.txt', 'r') as f:
   print("Last: " + f.readline())

episodes = []

for episode in range(len(files)):
   x = episode.find("x")
   episodes.append(episode[x - 1:x + 2])

index = episodes.find("2x01")
serie = {}

Espero que me ayuden, gracias y un saludo.

tincopasan

Estaría bueno que uses el foro para solventar dudas no para que te hagan la tarea!
Citarquiero que al llegar a un cierto episodio añada a un diccionario una clave con el número de la temporada y el valor con una lista de los episodios de esa temporada.

1)¿en qué parte del código está la comparación con el número de episodios ?
2)ya preguntaste de diccionarios, pues ¿dónde lo declaraste?
3)Hay varios métodos para agregar datos ¿cuál intentaste usar?
4)engel lex te mostró un método en otro de tus post , ni ese veo en tú código.

por lo tanto desarrolla el código que quieres y si no anda, pues bien, ahí los que saben seguro te ayudarán, aunque si tenés suerte alguien te hace lo que querés.

Eleкtro

#2
Puedes hacerlo de la siguiente manera:

Código (python) [Seleccionar]
# -*- coding: Windows-1252 -*-

import os, re, sys

episodes = {}

for file in os.listdir('.\\'):
 match = re.match(r'(?P<filename>P0k3M0N\.(?P<season>(\d+))x(?P<chapter>\d+).+\.avi\.mp4)', file)
 if match:
   episodes.setdefault(match.group('season'), []).append(match.group('filename'))

for key, value in episodes.iteritems():
  print key, value

sys.exit(0)


He utilizado expresiones regulares con agrupaciones nombradas para simplificar la tarea e intentar que te resulte más comprensible la obtención de esos valores del nombre.

Resultado de ejecución:
1 ['P0k3M0N.1x01.Es.avi.mp4', 'P0k3M0N.1x02.Es.avi.mp4']
2 ['P0k3M0N.2x01.Es.avi.mp4', 'P0k3M0N.2x02.Es.avi.mp4', 'P0k3M0N.2x03.Es.avi.mp4']


PD: No se si te has fijado en el detalle de que esos archivos de video que descargaste tienen doble extensión... deberías cojer un renombrador de archivos y así de paso arreglas ese formato tan feo lleno de puntos y números reemplazando vocales -.- (c0m0 0d10 qu3 h4g4n 3s0)

Saludos








987123564