[Python] script per rinomiare file

Manlio Perillo manlio.perillo a gmail.com
Mer 5 Ott 2011 17:16:30 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 05/10/2011 16:20, Valerio Pachera ha scritto:
> Ciao ragazzi, ho bisogno di una dritta.
> Ho necessità di rinominare dei file da un windows 2008.
> Questi file contengono dei caratteri accentati o particolari, come '°'.
> Devo sostituire questi caratteri con caratteri alfanumerici non accentati.
> 
> Siccome la gestione delle stringe non è una cosa banale, come mi
> consigliate di procedere?

Come vuoi procedere?
Processare in modalità "batch" tutti i files in una determinata
directory oppure rinominare i files uno ad uno?

Nel primo caso puoi:

1) Usare os.walk
   http://docs.python.org/library/os.html#os.walk
   per processare i singoli files.

   E' **importante** passare una stringa Unicode alla funzione
   os.walk, in modo che i nomi dei files restituiti siano stringhe
   Unicode. Altrimenti in Python 2.x (in 3.x le cose sono cambiate)
   avrai nomi di files come byte strings codificate secondo l'encoding
   locale.

2) Rinominare ciascun file secondo un determinato algoritmo.
   E di possibili algoritmi me ne vengono in mente molti.

   Marco ti ha suggerito unidecode, che non conosco e non sono sicuro
   sia la scelta migliore.

   Un altra soluzione è, ad esempio:

      >>> import unicodedata
      >>> test = u'Manlio çè°'
      >>> print unicodedata.normalize('NFKD', test)
      Manlio çè°
      >>> tmp = unicodedata.normalize('NFKD', test)
      >>> b = tmp.encode('us-ascii', 'ignore')
      >>> print b
      Manlio ce


L'esempio usa alcuni concetti avanzati di Unicode e del supporto ai
codecs di Python; in pratica la normalizazione NFKD scompone alcuni
caratteri in una sequenza di caratteri equivalenti in Unicode.
Ad esempio il carattere "é" è composto dal semplice carattere "e" più il
carattere che denota l'accento.

Infine, quando facciamo l'encoding, diciamo alla funzione encode di
ignorare i caratteri che non sono ASCII.
E' possibile fare altre cose, oltre ad ignorare:
http://docs.python.org/library/codecs.html#codec-base-classes

Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk6MdM4ACgkQscQJ24LbaUQ3HwCdFAjqVnzHEXcHOOg8xI9uIVpN
iywAmwb9ydjLpSWRuuqgQndhQJUwOxM+
=Fnh2
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python