PDA

View Full Version : [Python] Problemino rinomina file ed uso os


francolol
09-05-2015, 12:53
Salve ragazzi, ho un "piccolo" problemino con questo script di Python. Siccome sull'hard disk esterno del PC ho tantissime serie Tv con nomi stroppiati, avevo pensato di fare un piccolo script che potesse agevolarmi nel mettere in ordine tutti gli episodi. Provandolo con file casuali funzionava benissimo ma quando sono andato a provarlo su una cartella di una serie mi da questo errore
Traceback (most recent call last):
File "C:/Python34/Renominator.py", line 31, in <module>
Renominator("C:\\Suits 02")
File "C:/Python34/Renominator.py", line 21, in Renominator
os.rename(percorso+file, percorso +nome_serie+" " + stagione+" " + "e0"+str(numero_episodio) +" "+ qualita+estensione)
FileExistsError: [WinError 183] Impossibile creare un file, se il file esiste già: 'C:\\Suits 02//Suits s02 e02 HDTV x264.srt' -> 'C:\\Suits 02//PSuits s02 e01 HDTV x264.srt'



Il codice è questo (sicuramente farà pena ma dato che non programmo da un anno per mancanza di tempo e non ho mai potuto imparare davvero non insultatemi ahahahha :mc: )


import os

def Renominator(cartella):
numero_files= len([name for name in os.listdir(cartella)])
conta = 0
numero_episodio = -1
percorso = cartella+"//"
nome_serie = input("Nome della serie: ")
stagione = input("Stagione: ")
stagione = "S0" + str(stagione)
qualita = input ("Qualità: ")

while conta <= numero_files:
conta = conta + 1
numero_episodio = numero_episodio + 1
for file in os.listdir(cartella):
(nome_vecchio, estensione) = (os.path.splitext(file))

if "e0"+str(numero_episodio) in file or "E0"+str(numero_episodio) in file:
os.rename(percorso+file, percorso +nome_serie+" " + "E0"+str(numero_episodio) + " "+stagione+" "+ qualita+estensione)

elif "e1"+str(numero_episodio) in file or "E1"+str(numero_episodio) in file:
os.rename(percorso+file, percorso +nome_serie+" " + "E1"+str(numero_episodio)+ " "+stagione +" "+ qualita+estensione)

elif "e2"+str(numero_episodio) in file or "E2"+str(numero_episodio) in file:
os.rename(percorso+file, percorso +nome_serie+" " +"E2"+str(numero_episodio) +" "+stagione+" "+ qualita+estensione)

elif "e3" + str(numero_episodio) in file or "E3"+str(numero_episodio) in file:
print("Errore: ci sono più di 29 episodi")
print("Serie rinominata...")

def start():
risposta = input("Vuoi rinominare una cartella? Se si premi invio, altrimenti premi qualsiasi altro pulsante")
while risposta == "":
Cartella = (os.path.normpath(input("Inserire percorso directory: ")))
Renominator(Cartella)
risposta = input("Premi di nuovo invio per rinominare un'altra serie")

print("Grazie per aver usato questo programma")


start()

edit: codice corretto, c'era un altro errore che non aveva a che fare con il problema:)

Apparte gli scherzi, ogni consiglio/critica è più che ben accetto :D
Grazie a tutti

cdimauro
10-05-2015, 21:16
Il codice non ha alcun problema di per sé. L'errore che ottieni è chiaramente spiegato nell'ultima riga dello stack trace:
FileExistsError: [WinError 183] Impossibile creare un file, se il file esiste già: 'C:\\Suits 02//Suits s02 e02 HDTV x264.srt' -> 'C:\\Suits 02//PSuits s02 e01 HDTV x264.srt'
Hai cercato di rinominare un file, che però esiste già, e dunque l'operazione fallisce (giustamente).

francolol
11-05-2015, 16:23
Ma infatti se noti il nome con cui voglio rinominarlo è diverso. Non voglio ricreare il file, voglio solo cambiargli il nome ed anche cambiandolo tutto comunque mi dà errore :help:

cdimauro
11-05-2015, 19:16
Sì, lo so, ma il punto è che il nuovo nome che vorresti dargli risulta già assegnato a un file. E' per questo che l'operazione fallisce.

francolol
12-05-2015, 20:48
Sì, lo so, ma il punto è che il nuovo nome che vorresti dargli risulta già assegnato a un file. E' per questo che l'operazione fallisce.

Grazie mille :sofico: ! Trovato l'errore! C'erano due file con lo stesso numero episodio e stessa estensione (.srt). Resta il fatto che devo trovare il tempo per farci un po' di pratica in più. Intanto se a qualcuno servisse una cosa del genere ho rieditato il codice dato che c'era un errore :)

Comunque grazie sempre a cdimauro, che ha sempre tanta pazienza ^_^