você está aqui: Home  → Arquivo de Mensagens

Renomear arquivos em massa removendo símbolos inúteis

Colaboração: Rafael Henrique da Silva Correia

Data de Publicação: 17 de janeiro de 2012

Acabei de fazer este script em Python e posto aqui pois não achei ninguém que tivesse feito algo assim e eu estava precisando muito! Este script elimina símbolos básicos (áéíóúãç ... etc) dos nomes dos arquivos e já os renomeia, usarei este para renomear uma série de arquivos antes de enviá-los a uma página web (a qual não trabalha bem com acentos e espaços). Quem quiser modificá-lo para seu uso fique a vontade! Segue a dica...

  #!/usr/bin/env python
  # -*- encoding: utf-8 -*-
  
  from os import rename
  from os import listdir
  
  arquivos = listdir('.')
  for arquivo in arquivos:
    rename(arquivo, arquivo.replace("á","a").replace("é","e").replace("í","i").replace("ó","o").replace("ú","u").replace("ã","a").replace("ç","c").replace(" ","_").replace(",","").replace("õ","o"))
    print arquivo.replace("á","a").replace("é","e").replace("í","i").replace("ó","o").replace("ú","u").replace("ã","a").replace("ç","c").replace(" ","_").replace(",","").replace("õ","o");
Rafael é bacharel em Ciência da computação pela Universidade de Sorocaba, apaixonado por Software livre e também colaborador ativo dentro da comunidade, mantêm o seu blog no endereço http://abraseucodigo.com.br e busca sempre compartilhar conhecimento com as outras pessoas

Facebook - alvo de criminosos cibernéticos

Por Fátima Conti

Facebook - alvo de criminosos cibernéticos

#infografico



 

 

Veja a relação completa dos artigos de Rafael Henrique da Silva Correia

Opinião dos Leitores

Tiago Peczenyj
17 Jan 2012, 15:43
Ola

existe um problema nessa abordagem, mas ela deve ser suficiente em boa
parte dos casos.

acontece que uma letra acentuada pode ser representada de duas formas

a letra é por exemplo pode ser

U+00E9 ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ᴇ ᴡɪᴛʜ ᴀᴄᴜᴛᴇ
ou
combinação de U+0065 ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ com U+0301 ᴄᴏᴍʙɪɴɪɴɢ ᴀᴄᴜᴛᴇ ᴀᴄᴄᴇɴᴛ

Para funcionar coisas desse tipo é preciso normalizar as strings
envolvidas. Nesse caso precisamos escolher se vamos fazer uma NFC ou
NFD

NFC: Canonical Decomposition
NFD: Canonical Decomposition, followed by Canonical Composition

fonte:
http://unicode.org/reports/tr15/

O importante é, qualquer que seja a escolha, deve ser aplicada em
ambos os lados, tanto nos argumentos do tr quanto no no arquivo em si.
Por exemplo se escolhermos a NFD precisamos primeiros executar sobre o
script uma NFD e depois garantir que a entrada dos dados sera
normalizada da mesma forma, assim um é sera igual a um é.

É virtualmente impossivel de distinguir a diferença entre dois é sem
usar algo como hexdump. Depende do setup do seu editor para o é ser um
byte ou dois.

Como fazer isso em shell? Hoje eu tenho uma solução para o mundo linux
com convmv com as opcões:

--nfc
target files will be normalization form C for UTF-8 (Linux etc.)

--nfd
target files will be normalization form D for UTF-8 (OS X etc.).

Em perl é possivel seguir a dica abaixo:
http://www.effectiveperlprogramming.com/blog/1324

Em python vou ficar devendo.

ps: se no mesmo diretorio tiver os arquivos ação e acao, acho que temos um problema.
gaphurae
17 Jan 2012, 15:12
Tchê loko. Por acaso tu não tentou usar as funções do zz. Pois tem algo do tipo "zz arrumanome * ". Veja "zz ajuda".
Arnaldo
17 Jan 2012, 12:14
Se no mesmo diretório aparecerem vários arquivos que resultam na mesma renomeação, BUUUUUUUM!!!!!!!!!!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script