Ciao, come primo progetto per migliorare le mie abilità con python ho deciso di creare uno script per rinominare gruppi di file. (funzione che manca a nautilus, file manager di default in gnome)

So che esistono molti script e programmi in grado di fare la stessa cosa.
Il mio è scritto per essere il più semplice ed immediato possibile. L'ho creato per l'utilizzo da terminale, senza nessuna GUI. E spero di aver raggiunto il mio scopo.

Sarei felice di avere un vostro parere o un contributo.
Grazie.

codice:
#!/usr/bin/python2.7

"""Pyren, rinomina gruppi di file e cartelle.
Copyright (C) 2012  Marco 'Falk689' Fabbri.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>."""
    
import os

corr = os.getcwd()
print ""
print "======================================================"
print ""
print "Pyren. Copyright (C) 2012  Marco 'Falk689' Fabbri"
print "This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'."
print "This is free software, and you are welcome to redistribute it"
print "under certain conditions; type `show c' for details."
print ""
print "======================================================"
print "ATTENZIONE: Usare nomi identici a quelli gia' presenti"
print "nella cartella di destinazione potrebbe causare"
print "effetti imprevisti. Sei stato avvisato."
print "======================================================"
print ""

def rinomina():   #Funzione finale di rinomina.
   global cartella  
   try:
      num = input("Inserisci il numero del primo file (1): ")
      numero = repr(num)
      if num < 10:
         numero = "000"+numero
      elif num < 100:
         numero = "00"+numero
      elif num < 1000:
         numero = "0"+numero
   except:
      num = 1
      numero = "0001"
   global sfile
   global nomelista
   nome = nomelista+"-"+numero
   print "Rinomina in corso..."
   a = 0
   
   for i in sfile:
      numfile = sfile[a]
      nomefile = cartella[numfile]
      
      if "." in nomefile:   #Verifica se si tratta di un file o di una cartella tramite il formato (es testo.txt)
         u = nomefile.index(".")
         formato = nomefile[u:100]
         nome = nome+formato
         if nome in cartella:
            nome = nomelista+"-"+numero+"-sav"+formato
            
      if nome in cartella:
         nome = nomelista+"-"+numero+"-sav" 
         
      os.rename(cartella[numfile], nome)
      print cartella[num-1]+" > rinominato in: > "+nome 
      
      a = a + 1
      num = num + 1
      numero = repr(num)
      if num < 10:
         numero = "000"+numero
      elif num < 100:
         numero = "00"+numero
      elif num < 1000:
         numero = "0"+numero
      nome = nomelista+"-"+numero
      
   print "Operazione completata."

def lista():   #Definizione e stampa della lista dei file nella cartella
   global cartella
   cartella = os.listdir(corr)
   cartella.sort()
   print "======================================================"
   print "Lista file:"
   global termine
   a = 1
   b = 0
   for x in cartella:
      print a,">>>", cartella[b]
      a, b = a + 1, b + 1
   termine = b
   select()
      
def select():   #Selezione dei singoli o delle serie di file
   global cartella   
   global sfile
   global nomelista
   sfile = []
   print "======================================================"
   print "Digita un numero corrispondente ad un file da"
   print "rinominare oppure due numeri separati da una"
   print "virgola, per selezionare una serie di file (es 1,10)"
   print "" 
   print "`d' per concludere la selezione,"
   print "`r' per riavviare il programma,"
   print "`exit' per uscire."
   print ""
   
   while True:
      x = raw_input(">>> ")
      if x == "exit":
         print "Uscita in corso..."
         break
         
      elif x == "show w":
         print ""
         print "This program is distributed in the hope that it will be useful,"
         print "but WITHOUT ANY WARRANTY; without even the implied warranty of"
         print "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
         print "GNU General Public License for more details."
         print ""
      elif x == "show c":
         print ""
         print "This program is free software: you can redistribute it and/or modify"
         print "it under the terms of the GNU General Public License as published by"
         print "the Free Software Foundation, either version 3 of the License, or"
         print "(at your option) any later version."
         print ""
         
      elif x == "r":
         print "Riavvio..."
         print ""
         print ""
         print ""
         lista()
         break
         
      elif x == "d" and sfile == []:
         print "Seleziona almeno un file."
         
      elif x == "d":
         sfile.sort()
         print "Selezione completata."
         nomelista = raw_input("Digita il nome della lista: ")
         if nomelista == "":             
            nomelista = " "
         print "Il nome e':", nomelista
         print "I file interessati sono:"
         f = 0
         for k in sfile:
            numfile = int(k)
            print cartella[numfile]
            f = f + 1
         procedi()
         break
      else:
         try:
            if x.count(',') == 1 and x[0] != 0 and x.count(' ') == 0:
               virgola = x.index(',')
               pstr = x[0:virgola]
               sstr = x[virgola+1:100]
               primo = int(pstr) - 1
               secondo = int(sstr)
               if secondo <= termine:
                  j = range(primo,secondo)
                  for n in j:
                     sfile.append(n)
               else:
                  print "File non disponibile"
                  
            else:                                                                                   
               j = int(x)
               d = j - 1 
               if d in sfile:
                  print "File gia' selezionato"
               elif j > termine or j == 0:
                  print "File non disponibile."
               elif j != 0:
                  j = j - 1
                  sfile.append(j)
         except:
            print "Inserisci un numero o un comando valido"
            
def procedi():   #Semplice funzione di conferma in grado di riavviare o uscire dal programma
   domanda = raw_input("Procedi? `s', `n', `exit': ")
   if domanda == "s":
      rinomina()
   elif domanda == "exit":
      print "Uscita in corso..."
      return     
   elif domanda == "n":
      lista()
   else:
      print "Rispondi `s',`n' o `exit'"
      procedi()
      
lista()