Battousai Posted April 30, 2008 at 01:57 PM Report Share #182623 Posted April 30, 2008 at 01:57 PM Bem, estou a iniciar-me em python, estou mesmo muito verdinho. Resolvi fazer uma função que permite normalizar nomes de ficheiros e pastas, substituindo os caracteres especiais e desnecessários, para uso na net, ou quem sabe mesmo no vosso pc. Agradecia sugestões, comentários e críticas para melhorar, visto que Python é bastante diferente de todas as outras linguagens em que mexi até agora. Obrigado. #!/usr/bin/env python # -*- coding: UTF-8 -*- # @ author: Mauro Pinto from os.path import splitext from re import sub def Sanitize(badString, filetype = False): if type( badString ) != type(""): return False bad = ['Š','Ž','š','ž','Ÿ','À','Á','Â','Ã','Ä','Å','Ç', 'È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô', 'Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','à','á','â','ã', 'ä','å','ç','è','é','ê','ë','ì','í','î','ï','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ', 'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ','”',"'", '“','”',"\n","\r",'_'] good = ['S','Z','s','z','Y','A','A','A','A','A','A','C', 'E','E','E','E','I','I','I','I','N','O','O','O', 'O','O','O','U','U','U','U','Y','a','a','a','a', 'a','a','c','e','e','e','e','i','i','i','i','n', 'o','o','o','o','o','o','u','u','u','u','y','y', 'TH','th','DH','dh','ss','OE','oe','AE','ae','u', '','','','','','','-'] for x in range( 0, len( bad ) ): badString = badString.replace( bad[x], good[x] ) badString = [sub("[^A-Za-z0-9\-]", "", sub("\s+", "-", s ) ) for s in splitext( badString.strip() )] return (badString[0] + (filetype and "." or "") + badString[1]).lower() if __name__ == "__main__": print Sanitize("çççÇÇÇÇÇççççàÀëóíé~^;;;,qweqweW..", False) print Sanitize("asd.asd.asd.asd.asd.cmd", True) Link to comment Share on other sites More sharing options...
djthyrax Posted April 30, 2008 at 05:13 PM Report Share #182666 Posted April 30, 2008 at 05:13 PM Esse loop foi bem pensado. 👍 Mas se tivesses no bad letras que já tenhas no good, isso pode dar buraco. Eu faria antes: def rep(x): global bad, good for i in range(0, len(bad)): if bad[i] is x: return good[i] return x map(rep, badString) Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Battousai Posted April 30, 2008 at 06:02 PM Author Report Share #182678 Posted April 30, 2008 at 06:02 PM hum, chegas-te a testar isso? aqui dá bronca, supondo que estejas a falar disto: def rep(x): global bad, good for i in range(0, len(bad)): if bad[i] is x: return good[i] return x def Sanitize(badString, filetype = False): if type(badString) != type(""): return False global bad,good #list = zip( bad, good ) nova = str( map(rep,badString) ) #for couple in list: # badString = badString.replace(couple[0], couple[1]) split = map(lambda txt:re.sub("[^A-Za-z0-9\-]", "", re.sub("\s+", "-", txt ) ),[s for s in os.path.splitext( nova.strip() )]) return (split[0] + (filetype and "." or "") + split[1]).lower() bad = ['Š','Ž','š','ž','Ÿ','À','Á','Â','Ã','Ä','Å','Ç', 'È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô', 'Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','à','á','â','ã', 'ä','å','ç','è','é','ê','ë','ì','í','î','ï','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ', 'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ','”',"'", '“','”',"\n","\r",'_'] good = ['S','Z','s','z','Y','A','A','A','A','A','A','C', 'E','E','E','E','I','I','I','I','N','O','O','O', 'O','O','O','U','U','U','U','Y','a','a','a','a', 'a','a','c','e','e','e','e','i','i','i','i','n', 'o','o','o','o','o','o','u','u','u','u','y','y', 'TH','th','DH','dh','ss','OE','oe','AE','ae','u', '','','','','','','-'] Link to comment Share on other sites More sharing options...
djthyrax Posted April 30, 2008 at 06:41 PM Report Share #182691 Posted April 30, 2008 at 06:41 PM Não é str(map()), é ''.join(map()), sorry 'bout that. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Battousai Posted April 30, 2008 at 06:48 PM Author Report Share #182695 Posted April 30, 2008 at 06:48 PM o if bad[i] is x: não funca aqui Link to comment Share on other sites More sharing options...
Battousai Posted April 30, 2008 at 06:56 PM Author Report Share #182698 Posted April 30, 2008 at 06:56 PM opa deixa la isso, também quem é que vai alterar os caracteres e metê-los repetidos? só doidos! 👍 Link to comment Share on other sites More sharing options...
Ivo Pereira Posted August 28, 2008 at 02:56 AM Report Share #207304 Posted August 28, 2008 at 02:56 AM opa deixa la isso, também quem é que vai alterar os caracteres e metê-los repetidos? só doidos! 😄 || || \/ mania de preguiçoso 😛 xD Link to comment Share on other sites More sharing options...
Rui Carlos Posted August 28, 2008 at 12:24 PM Report Share #207342 Posted August 28, 2008 at 12:24 PM Vocês estão a percorrer o array a ver qual a posição no bad que ele ocupa? Se sim, usar uma estrutura de dados tipo um map/hash devia ser bem mais eficiente... Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
djthyrax Posted August 28, 2008 at 01:32 PM Report Share #207366 Posted August 28, 2008 at 01:32 PM Se sim, usar uma estrutura de dados tipo um map/hash devia ser bem mais eficiente... Sim, tens razão. Até estava capaz de aprender mais algumas coisas de Python e criar um tipo para isso, mas estou com preguiça. 😛 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Rui Carlos Posted August 28, 2008 at 01:45 PM Report Share #207379 Posted August 28, 2008 at 01:45 PM O Python não tem nada disso? Acho que já ouvi falar em dicionários em Python (ou se calhar foi só em Perl). Não sei que estrutura de dados têm por traz (neste caso, o ideal devia ser uma tabela de hash), mas já devia servir. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
djthyrax Posted August 28, 2008 at 01:49 PM Report Share #207380 Posted August 28, 2008 at 01:49 PM Tem, o dict, e sim, é uma tabela de hashes. Mas considero o conceito do dict muito pouco explorado, pelo que preferia re-implementá-lo. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Battousai Posted August 29, 2008 at 04:16 PM Author Report Share #207591 Posted August 29, 2008 at 04:16 PM Vocês estão a percorrer o array a ver qual a posição no bad que ele ocupa? Se sim, usar uma estrutura de dados tipo um map/hash devia ser bem mais eficiente... A minha implementação inicial era bem mais eficiente que esta, mas editei porque ainda não sabia bem quais as estruturas mais eficientes em python e pensei que esta seria a melhor. Estava enganado... ? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now