<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Valdinei dos Santos &#187; python</title>
	<atom:link href="http://www.valdineidossantos.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valdineidossantos.com</link>
	<description>programação, sistemas operacionais e assuntos web</description>
	<lastBuildDate>Sat, 27 Feb 2010 20:09:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Editando tags id3 com python</title>
		<link>http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/</link>
		<comments>http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 20:31:33 +0000</pubDate>
		<dc:creator>Valdinei</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[mutage]]></category>
		<category><![CDATA[mutagen]]></category>
		<category><![CDATA[os.join]]></category>
		<category><![CDATA[os.walk os.path]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.valdineidossantos.com/?p=150</guid>
		<description><![CDATA[Ola a todos, Hoje vou falar de um problema que muitas pessoas devem ter. Ao baixar uma música qualquer da internet os carinhas colocam o nome do site no Titulo da música, no artista e nos comentários mas como isso se o o arquivo esta com nome correto? Eles usam as tags ID3, mas então [...]]]></description>
			<content:encoded><![CDATA[<p>Ola a todos, </p>
<p>Hoje vou falar de um problema que muitas pessoas devem ter. Ao baixar uma música qualquer da internet os carinhas colocam o nome do site no Titulo da música, no artista e nos comentários mas como isso se o o arquivo esta com nome correto?<br />
Eles usam as tags ID3, mas então o que é a tag ID3? </p>
<p>&#8220;A etiqueta ID3 (em inglês: ID3 Tag) é um conjunto de informações mais usados junto com o formato de áudio MP3. Ela permite armazenar informações como o título, artista, album, número da faixa, ou outra informação sobre o arquivo no próprio aquivo.&#8221; Wikipedia [1]</p>
<p>Depois de ler um pouco a respeito resolvi mudar as tags das músicas para que quando as estiver escutando apareçam os dados válidos como nome da música e do Artista que a canta. Eu uso o Rhythmbox[2] e este pode até ser integrado ao seu software para conversa instantanea como AMSN[4], PIDGIN[4] dentre outros. Fazer isso na mão seria muito cansativo e não divertido, solução &#8230;. python. </p>
<p>Para este script utilizei uma biblioteca não padrão do python o mutagen[5], este serve para mostrar/editar as tags ID3 das músicas em formato mp3.</p>
<p>De acordo com o exemplo do site bastam 4 linhas para abrir->modificar->salvar o titulo de uma música em formato mp3 em seu HD.</p>
<pre class="brush:python">
 from mutagen.easyid3 import EasyID3
 audio = EasyID3("sua_musica.mp3")
 audio["title"] = "Somente um exemplo no titulo"
 audio.save()
</pre>
<p>Agora vamos a meu script, não vou comentar pois o código já esta bem comentado.</p>
<pre class="brush:python">
#!/bin/env python
#!-*- coding: utf-8 -*-
from sys import exit
from os import walk, path
from os.path import isfile, join

"""
@author: Valdinei dos Santos
@twitter: http://twitter.com/valdineisantos
@site: http://www.valdineidossantos.com/
@date: 16 Janeiro 2010
"""

try:
    from mutagen.easyid3 import EasyID3
except:
    print "Necessario instalar a biblioteca mutagen"
    print "Site: http://code.google.com/p/mutagen/"
    print "Python Setup Tools: easy_install mutagen"
    exit(1)

#Diretorio que vai ser pesquisado
directory_root = "/home/valdinei/Musica/Downloads/"

def getInformations(track):
        fileAtributes = dict()
        """
        O Padrão das músicas estavam "01 - Artista - Album.mp3"
        Nesta parte de Código vc deve se adequar a sua realidade mas isso é só trabalhar com strings.
        """
        #split por "- " me dará com resultado 3 strings
        trackNumber, artist, title   =  track.split("- ")

        #Que depois de tratadas serao retorandas como valor final
        fileAtributes["trackNumber"] =  trackNumber.strip()
        fileAtributes["artist"]      =  artist.strip() 

        #Tratando a string como um lista. O .mp3 esta sendo ignorado pois pego tudo -4 casas do final
        fileAtributes["title"]       =  title.strip()[:-4]

        return fileAtributes 

"""
Caso tenhamos mais diretorios internos sera recursivo.
Mais sobre Walk em : http://docs.python.org/library/os.html#os.walk
"""
for (original,  directoryname, filenames) in walk (directory_root):
    filenames.sort()

    total = len(filenames)

    cont = 0;

    for filename in filenames:
        """
        Calculando a porcentagem de arquivos feitos
        (parcial * 100)/numero total de músicas
        """
        cont = cont +  1
        percent = round (cont * 100 / total )
        print "%02d%%" % percent

        info = getInformations(filename)

        #Verifico se o endereço do arquivo é valido realmente e se ele continua la.
        if isfile( join(original,filename) ):
            """
            Agora vamos começar a modificar as tags ID3 dos arquivos MP3 depois salva-los.
            """
            try:
                mp3 = EasyID3( join(original,filename) )
                mp3["title"] = info["title"]
                mp3["artist"] = info["artist"]
                mp3["tracknumber"] = info["trackNumber"]

                #Salva as informações no arquivo
                mp3.save()
            except Exception, e:
                print "%s %s" % (e.__doc__, e )

print "Todos os Arquivos foram modificados"
</pre>
<p>E com isso suas mp3 agora vão ter o formato que você definiu que teriam. Atenção eu em momento algum modifiquei o nome físico do arquivo, somente as meta informações baseadas no nome que era o que eu tinha em mãos. </p>
<p>Não estou em momento nenhum incentivando a NINGUÉM baixar NADA da internet. A idéia original aqui era simplesmente python + programação e algumas boas práticas. </p>
<p>Algumas coisas que derrepente podem ter passados despercebidas foi o uso do os.walk, os.join, os.isfile todos importados no cabeçalho. Mas isso pode ser um outro assunto de post.</p>
<p>Seguem os links de referencia:</p>
<p>[1] Wikipedia : <a href="http://pt.wikipedia.org/wiki/ID3" target="_blank"> http://pt.wikipedia.org/wiki/ID3 </a></p>
<p>[2] Rhythmbox:  <a href="http://projects.gnome.org/rhythmbox/" target="_blank">  http://projects.gnome.org/rhythmbox/ </a></p>
<p>[4] AMSN: <a href="http://www.amsn-project.net/" target="_blank"> http://www.amsn-project.net/ </a> (esse projeto originalmente era feito por um brasileiro)</p>
<p>[5] PIDGIN: <a href="http://www.pidgin.im/" target="_blank"> http://www.pidgin.im/ </a></p>
<p>[6] Mutagen: <a href="http://code.google.com/p/mutagen/" target="_blank"> http://code.google.com/p/mutagen/ </a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "mp3 python programacao";
            bb_bid  = "135874";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "9";bb_format = "bbo";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->

<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python&amp;desc=Ola%20a%20todos%2C%20%0D%0A%0D%0AHoje%20vou%20falar%20de%20um%20problema%20que%20muitas%20pessoas%20devem%20ter.%20Ao%20baixar%20uma%20m%C3%BAsica%20qualquer%20da%20internet%20os%20carinhas%20colocam%20o%20nome%20do%20site%20no%20Titulo%20da%20m%C3%BAsica%2C%20no%20artista%20e%20nos%20coment%C3%A1rios%20mas%20como%20isso%20se%20o%20o%20arquivo%20esta%20com%20nome%20correto%3F%20%0D%0AEles%20usam%20as%20tags%20ID3%2C%20mas%20ent%C3%A3o%20o%20que" rel="nofollow" class="external" title="Publicar noDiigo">Publicar noDiigo</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;t=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Editando+tags+id3+com+python&amp;body=Link: http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Ola%20a%20todos%2C%20%0D%0A%0D%0AHoje%20vou%20falar%20de%20um%20problema%20que%20muitas%20pessoas%20devem%20ter.%20Ao%20baixar%20uma%20m%C3%BAsica%20qualquer%20da%20internet%20os%20carinhas%20colocam%20o%20nome%20do%20site%20no%20Titulo%20da%20m%C3%BAsica%2C%20no%20artista%20e%20nos%20coment%C3%A1rios%20mas%20como%20isso%20se%20o%20o%20arquivo%20esta%20com%20nome%20correto%3F%20%0D%0AEles%20usam%20as%20tags%20ID3%2C%20mas%20ent%C3%A3o%20o%20que" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;bm_description=Editando+tags+id3+com+python&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Adicionar aoMister Wong">Adicionar aoMister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Compartilhar noMixx">Compartilhar noMixx</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Editando+tags+id3+com+python&amp;du=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;cn=Ola%20a%20todos%2C%20%0D%0A%0D%0AHoje%20vou%20falar%20de%20um%20problema%20que%20muitas%20pessoas%20devem%20ter.%20Ao%20baixar%20uma%20m%C3%BAsica%20qualquer%20da%20internet%20os%20carinhas%20colocam%20o%20nome%20do%20site%20no%20Titulo%20da%20m%C3%BAsica%2C%20no%20artista%20e%20nos%20coment%C3%A1rios%20mas%20como%20isso%20se%20o%20o%20arquivo%20esta%20com%20nome%20correto%3F%20%0D%0AEles%20usam%20as%20tags%20ID3%2C%20mas%20ent%C3%A3o%20o%20que" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Compartilhar noReddit">Compartilhar noReddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/&amp;title=Editando+tags+id3+com+python" rel="nofollow" class="external" title="Encontrou algo bom? Compartilhe no StumbleUpon">Encontrou algo bom? Compartilhe no StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=RT+%40valdineisantos%3A+Editando+tags+id3+com+python+-+http://tr.im/KAFF&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Editando+tags+id3+com+python&amp;body=Link: http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Ola%20a%20todos%2C%20%0D%0A%0D%0AHoje%20vou%20falar%20de%20um%20problema%20que%20muitas%20pessoas%20devem%20ter.%20Ao%20baixar%20uma%20m%C3%BAsica%20qualquer%20da%20internet%20os%20carinhas%20colocam%20o%20nome%20do%20site%20no%20Titulo%20da%20m%C3%BAsica%2C%20no%20artista%20e%20nos%20coment%C3%A1rios%20mas%20como%20isso%20se%20o%20o%20arquivo%20esta%20com%20nome%20correto%3F%20%0D%0AEles%20usam%20as%20tags%20ID3%2C%20mas%20ent%C3%A3o%20o%20que" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.valdineidossantos.com/2010/01/editando-tag-id3-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O Zen do Python</title>
		<link>http://www.valdineidossantos.com/2009/08/zen-python/</link>
		<comments>http://www.valdineidossantos.com/2009/08/zen-python/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 14:06:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://www.valdineidossantos.com/?p=70</guid>
		<description><![CDATA[O Python também contem seus ovos de páscoa, neste post descrevo o Zen do python que basicamente é uma receita que se seguida usando  a linguagem será muito bem sucedida. ]]></description>
			<content:encoded><![CDATA[<p>A alguns dias descobri uma coisa bem interessante no python.  Ao fazer o import dele mesmo ele mostra alguns principios que foram criados por  Tim Peters.</p>
<p>Seguindo a risca esses principios dificilmente seu projeto vai dar errado <img src='http://www.valdineidossantos.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Como os encontro?</p>
<p>Em sua linha de comando (estou assumindo que  você esta em algum Unix e que tenha python instalado) digite:</p>
<pre class="brush: bash">$ python</pre>
<p>Neste momento você estará entrando no shell interativo do python depois é só fazer o import.</p>
<pre class="brush: bash"> import this</pre>
<p>O resultado você visualiza abaixo</p>
<pre class="brush: python">Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!</pre>
<p>Vou colocar também uma livre tradução que encontrei na internet e que cito o autor abaixo.</p>
<pre class="brush: python">Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Plano é melhor que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o bastante para se quebrar as regras.
Embora a simplicidade supere o purismo.
Erros nunca deveriam passar silenciosamente.
A menos que explicitamente silenciados.
Ao encarar a ambiguidade, recuse a tentação de adivinhar.
Deveria haver uma – e preferencialmente apenas uma – maneira óbvia de se fazer isto.
Embora aquela maneira possa não ser óbvia à primeira vista se você não for holandês.
Agora é melhor que nunca.
Embora nunca, seja muitas vezes melhor que pra já.
Se a implementação é difícil de explicar, é uma má idéia.
Se a implementação é fácil de explicar, pode ser uma boa idéia.
Namespaces são uma idéia estupenda – vamos fazer mais deles!</pre>
<p><a href="http://pipeless.blogspot.com/2008/09/o-zen-de-python.html" target="_blank"> fonte da tradução </a></p>
<p>Básicamente são boas maneiras para se trabalhar com python.</p>
<p>Algumas coisas que senti falta e que vou acrescer ao texto</p>
<pre class="brush: python">Marretas não são bem vindas, mas são necessárias.
O pior código é aquele que não existe, esse não dá dinheiro</pre>
<p>Bem acho que é isso que tinha a dizer hoje.</p>
<p>Fui &#8230;.</p>
<p>Fontes:</p>
<p><a title="http://www.python.org/dev/peps/pep-0020/" href="http://www.python.org/dev/peps/pep-0020/" target="_blank">http://www.python.org/dev/peps/pep-0020/</a></p>
<p><a title="http://pipeless.blogspot.com/2008/09/o-zen-de-python.html" href="http://pipeless.blogspot.com/2008/09/o-zen-de-python.html" target="_blank">http://pipeless.blogspot.com/2008/09/o-zen-de-python.html</a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "zen";
            bb_bid  = "135874";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "9";bb_format = "bbo";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->

<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.valdineidossantos.com/2009/08/zen-python/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python&amp;desc=O%20Python%20tamb%C3%A9m%20contem%20seus%20ovos%20de%20p%C3%A1scoa%2C%20neste%20post%20descrevo%20o%20Zen%20do%20python%20que%20basicamente%20%C3%A9%20uma%20receita%20que%20se%20seguida%20usando%20%20a%20linguagem%20ser%C3%A1%20muito%20bem%20sucedida.%20" rel="nofollow" class="external" title="Publicar noDiigo">Publicar noDiigo</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.valdineidossantos.com/2009/08/zen-python/&amp;t=O+Zen+do+Python" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=O+Zen+do+Python&amp;body=Link: http://www.valdineidossantos.com/2009/08/zen-python/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A O%20Python%20tamb%C3%A9m%20contem%20seus%20ovos%20de%20p%C3%A1scoa%2C%20neste%20post%20descrevo%20o%20Zen%20do%20python%20que%20basicamente%20%C3%A9%20uma%20receita%20que%20se%20seguida%20usando%20%20a%20linguagem%20ser%C3%A1%20muito%20bem%20sucedida.%20" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;bm_description=O+Zen+do+Python&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Adicionar aoMister Wong">Adicionar aoMister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python" rel="nofollow" class="external" title="Compartilhar noMixx">Compartilhar noMixx</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=O+Zen+do+Python&amp;du=http://www.valdineidossantos.com/2009/08/zen-python/&amp;cn=O%20Python%20tamb%C3%A9m%20contem%20seus%20ovos%20de%20p%C3%A1scoa%2C%20neste%20post%20descrevo%20o%20Zen%20do%20python%20que%20basicamente%20%C3%A9%20uma%20receita%20que%20se%20seguida%20usando%20%20a%20linguagem%20ser%C3%A1%20muito%20bem%20sucedida.%20" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python" rel="nofollow" class="external" title="Compartilhar noReddit">Compartilhar noReddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.valdineidossantos.com/2009/08/zen-python/&amp;title=O+Zen+do+Python" rel="nofollow" class="external" title="Encontrou algo bom? Compartilhe no StumbleUpon">Encontrou algo bom? Compartilhe no StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.valdineidossantos.com/2009/08/zen-python/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=RT+%40valdineisantos%3A+O+Zen+do+Python+-+http://tr.im/v3Zz&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=O+Zen+do+Python&amp;body=Link: http://www.valdineidossantos.com/2009/08/zen-python/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A O%20Python%20tamb%C3%A9m%20contem%20seus%20ovos%20de%20p%C3%A1scoa%2C%20neste%20post%20descrevo%20o%20Zen%20do%20python%20que%20basicamente%20%C3%A9%20uma%20receita%20que%20se%20seguida%20usando%20%20a%20linguagem%20ser%C3%A1%20muito%20bem%20sucedida.%20" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.valdineidossantos.com/2009/08/zen-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Postgresql &#8211; Backup de todas as base de dados</title>
		<link>http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/</link>
		<comments>http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 17:20:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.valdineidossantos.com/?p=30</guid>
		<description><![CDATA[Motivado por esse post ( http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro ) resolvi fazer algumas adaptações para atender as minhas especificações. Eu preciso ter backup do servidor inteiro mais não necessáriamente preciso retornar todas as bases para o novo servidor novamente, por esse motivo fiz o meu próprio script para resolver esse problema. Utilizando a linguagem python associada aos aplicativos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.postgresql.org/" target="_blank"><img class="size-full wp-image-45" title="postgresql" src="http://www.valdineidossantos.com/wp-content/uploads/2009/07/postgresql.png" alt="postgresql" width="500" height="50" /></a></p>
<p>Motivado por esse post ( <a title="http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro" href="http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro" target="_blank">http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro</a> ) resolvi fazer algumas adaptações para atender as minhas especificações.</p>
<p>Eu preciso ter backup do servidor inteiro mais não necessáriamente preciso retornar todas as bases para o novo servidor novamente, por esse motivo fiz o meu próprio script para resolver esse problema.</p>
<p>Utilizando a linguagem python associada aos aplicativos do postgresql montei esta rotina.</p>
<pre class="brush: python">#!/usr/bin/env python
#! -*- coding:utf8 -*-
########################################################
#  Script para fazer o pg_dump de todos os
#   bancos da máquina em que ele for executado
#  Valdinei dos Santos
#  valdineidossantos(at)gmail.com.br
#  27 Julho de 2009
########################################################
#Importando o getstatusoutput responsavel por executar os comandos do sistema operacional
from commands import getstatusoutput
from datetime import datetime
from os import path

#config
psql="/usr/bin/psql"
pg_dump="/usr/bin/pg_dump"
user="pguser-vale"
host="valdineidossantos.com"
repository = "/media/backup/databases/"

#Functions
def getAllDatabases(psql, user, host):
    print "\nRecuperando as bases de dados do servidor %s" % host
    command = "%s -U %s -h %s -l" % (psql, user, host)
    status, output = getstatusoutput ( command )
    if int(status) == 0:
       #return lista de servidores
       return stringToListServers( output )
    else:
        return [[],] 

def stringToListServers( databaseString ):
    print "\nFormatando a string"
    temp_pieces = databaseString.split("\n")
    dataBases = []
    for i in temp_pieces[3:]:
        try:
            pieces = i.split("|")
            owner  = pieces[1].strip()
            dbName = pieces[0].strip()
            encode = pieces[2].strip()
            data   = [dbName, encode, owner]
            if data:
                dataBases.append ( data )
        except Exception, e:
            continue
            #print e.__doc__
    return dataBases

#Init
if __name__ == '__main__':

    allDataBases =  getAllDatabases(psql, user, host)

    day = datetime.now().strftime("%Y%m%d")
    for database, encode, owner in allDataBases:
        #name Example databasename-20092707.dump
        dumpName = "%s-%s.dump" % (database, day)    

        #/dev/null/databasename-20092707.dump
        file = path.join(repository, dumpName)

        command = "%s -U %s -h %s -E %s  -f %s -i -Fc %s " % (pg_dump, user, host, encode, file, database)

        status, output = getstatusoutput( command)

        if int(status) &gt; 0:
            print "Erro no backup da database %s\n %s" % (database, output)</pre>
<p>Após esse script finalizado teremos no diretorio que foi setado no config &#8220;repository&#8221; todos os bancos de dados disponiveis no servidor.<br />
Para voltar novamente com a base dados para o novo servidor rodamos o comando.</p>
<pre class="brush: bash">pg_restore -d |nome da base dados| -Fc |caminho/nome do arquivo dump|</pre>
<p>Temos algumas outras opções em shell script  mas preferi usar  o python  :)<br />
<a href="http://www.python.org/" target="_blank"><img class="size-medium wp-image-46" title="python" src="http://www.valdineidossantos.com/wp-content/uploads/2009/07/python-300x101.jpg" alt="Python " width="300" height="101" /></a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "python";
            bb_bid  = "135874";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "9";bb_format = "bbo";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end -->

<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados&amp;desc=%0D%0A%0D%0AMotivado%20por%20esse%20post%20%28%20http%3A%2F%2Fwww.vivaolinux.com.br%2Fdica%2FPostgreSQL-Fazendo-backup-de-um-servidor-inteiro%20%29%20resolvi%20fazer%20algumas%20adapta%C3%A7%C3%B5es%20para%20atender%20as%20minhas%20especifica%C3%A7%C3%B5es.%0D%0A%0D%0AEu%20preciso%20ter%20backup%20do%20servidor%20inteiro%20mais%20n%C3%A3o%20necess%C3%A1riamente%20preciso%20retornar%20todas%20as%20bases%20para%20o" rel="nofollow" class="external" title="Publicar noDiigo">Publicar noDiigo</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;t=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Postgresql+-+Backup+de+todas+as+base+de+dados&amp;body=Link: http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A %0D%0A%0D%0AMotivado%20por%20esse%20post%20%28%20http%3A%2F%2Fwww.vivaolinux.com.br%2Fdica%2FPostgreSQL-Fazendo-backup-de-um-servidor-inteiro%20%29%20resolvi%20fazer%20algumas%20adapta%C3%A7%C3%B5es%20para%20atender%20as%20minhas%20especifica%C3%A7%C3%B5es.%0D%0A%0D%0AEu%20preciso%20ter%20backup%20do%20servidor%20inteiro%20mais%20n%C3%A3o%20necess%C3%A1riamente%20preciso%20retornar%20todas%20as%20bases%20para%20o" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;bm_description=Postgresql+-+Backup+de+todas+as+base+de+dados&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Adicionar aoMister Wong">Adicionar aoMister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Compartilhar noMixx">Compartilhar noMixx</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Postgresql+-+Backup+de+todas+as+base+de+dados&amp;du=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;cn=%0D%0A%0D%0AMotivado%20por%20esse%20post%20%28%20http%3A%2F%2Fwww.vivaolinux.com.br%2Fdica%2FPostgreSQL-Fazendo-backup-de-um-servidor-inteiro%20%29%20resolvi%20fazer%20algumas%20adapta%C3%A7%C3%B5es%20para%20atender%20as%20minhas%20especifica%C3%A7%C3%B5es.%0D%0A%0D%0AEu%20preciso%20ter%20backup%20do%20servidor%20inteiro%20mais%20n%C3%A3o%20necess%C3%A1riamente%20preciso%20retornar%20todas%20as%20bases%20para%20o" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Compartilhar noReddit">Compartilhar noReddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/&amp;title=Postgresql+-+Backup+de+todas+as+base+de+dados" rel="nofollow" class="external" title="Encontrou algo bom? Compartilhe no StumbleUpon">Encontrou algo bom? Compartilhe no StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=RT+%40valdineisantos%3A+Postgresql+-+Backup+de+todas+as+base+de+dados+-+http://tr.im/vi2g&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Postgresql+-+Backup+de+todas+as+base+de+dados&amp;body=Link: http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A %0D%0A%0D%0AMotivado%20por%20esse%20post%20%28%20http%3A%2F%2Fwww.vivaolinux.com.br%2Fdica%2FPostgreSQL-Fazendo-backup-de-um-servidor-inteiro%20%29%20resolvi%20fazer%20algumas%20adapta%C3%A7%C3%B5es%20para%20atender%20as%20minhas%20especifica%C3%A7%C3%B5es.%0D%0A%0D%0AEu%20preciso%20ter%20backup%20do%20servidor%20inteiro%20mais%20n%C3%A3o%20necess%C3%A1riamente%20preciso%20retornar%20todas%20as%20bases%20para%20o" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.valdineidossantos.com/2009/07/postgresql-backup-de-todas-as-base-de-dados/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
