Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Dicas Python ( Linux )

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Python Dicas Python ( Linux )

    Substituindo caracteres em Zope/Python
    Lembre, foram feitos estes testes em plataforma ZOPE.

    Pode ser usado tanto para Page Template quanto para script Python.

    Vamos lá!

    Exemplo 1:

    No primeiro exemplo vamos usar este código em um script Python. Adicione um script Python no seu Zope com qualquer nome, após criar mande editar o mesmo.

    Código:
    texto = """
    Aqui vem aquele texto enorme que você deseja substituir apenas alguns caracteres
    """
    
    #Vamos criar uma variável a ser substituída
    troca = 'a'
    
    #Vamos criar uma variável a substituir
    trocando = 'AAA'
    
    
    #Vamos por o código aqui
    return texto.replace(troca,trocando) 
    Ele vai procurar dentro da variável "texto" o caractere "a" (variável trocar) e vai substituir por AAA (variável trocando), pronto!

    Exemplo 2:

    No segundo exemplo vamos usar em Page Template o esquema de trocar os caracteres. Crie um Page Template com o nome de sua preferência, após isso edite o mesmo.

    Código:
    <!-- Vamos estruturá-lo dentro de uma HTML -->
    
    <html>
    <head>
    <Title>Trocando os caracteres - thiagofigueiredo.com.br</Title>
    </head>
    <body>
    
    <!--
    Na linha de baixo vamos definir uma variável pelo ZPT.
    
    Não é necessário a indentação pois no ZPT, isso é apenas uma forma de organizar o código.
    
    No Python, dependendo do que estiver sendo feito, é necessário a indentação para finalizar o bloco de código.
    
    Foram criadas três variáveis nas linhas abaixo, a cada *;* e criada uma variável.
    -->
    <div tal:define="texto python:'Aqui vem aquele texto enorme que você deseja substituir apenas alguns caracter';
    
    troca string:a;
    trocando string:AAA;">
    
    <!-- A linha abaixo troca os caracteres -->
    <b tal:content="python:texto.replace(troca,trocando)"></b>
    
    </div>
    </body>
    </html>
    Como você pode ver, não existe muita diferença entre os dois exemplos, a maior diferença é que o HTML foi estruturando.

    Você pode copiar o exemplo aí como está e colar nos seus respectivos tipos (script Python e Page Template), ele funciona sem problema.


    Gravar campos com acentuação em MySQL via Python

    Descobri uma maneira de colocar acentos no MySQL via Python. Coloquei a codificação de caracteres como UTF-8 no banco de dados e no Python, mas sempre tinha problemas com a inserção de caracteres com acentos, entre outros, nos campos de dados do MySQL.

    Sempre imaginei que bastava colocar isso no início do arquivo:

    #-*- coding:utf-8 -*-

    mas descobri que era necessário algo mais. Então está aí o exemplo de conexão com um banco de dados MySQL. Com definição de codificação de caracteres, o nome do banco de dados, usuário e senha são "python". Exemplo de código:

    Código:
    bd=MySQLdb.connect(host="localhost",user="python",passwd="python",db="python",charset="utf8", use_unicode = True) 
    Com isso terminei todos os meus problemas com acentuação no MySQL. Espero que essa dica ajude mais pessoas.

    Livro: Python para desenvolvedores

    Lançado a segunda edição do livro: Python para desenvolvedores, um ótimo livro e em português para quem quer aprender a linguagem python.

    As duas versões do livro podem ser baixadas Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... O livro é distribuído gratuitamente e está sob a licença Creative Commons.

    Ordenando dicionários em Python
    Bom galera, vai uma dica legal sobre Python. Como ordenar dicionários. Quem já tentou ordenar algum dicionário em Python percebeu que ele simplesmente não mantém a ordem com que os dados são inseridos, ou seja, se eu fizer isto:

    Código:
    ##DIC 1 E O DICIONÁRIO QUE SERÁ ORDENADO
    dic_1 = {'a':1,'b':3,'c':2}
    ##DICIONÁRIO AUXILIAR
    dic_aux = dic_1
    ##ORDENANDO DIC_1 PELOS VALORES
    dic_1 = sorted(dic_1.values())
    ##PEGA VALORES DO DIC_1 E VAI MONTANDO DIC_RESULTADO A PARTIR DO MENOR VALOR
    dic_resultado = {}
    for i in dic_1:
       for item in dic_aux:
          if item[i] == i
             dic_resultado[item] = i
    print dic_resultado
    O dicionário resultado teria ordem aleatória, ou seja, qualquer ordem, menos a que nos queremos (ordem de inserção). Bom, se o Python não tivesse o mal costume não manter a ordem no dicionário, conforme os itens são adicionados, isto resolveria o nosso problema. Mas como ele não mantém a ordem, precisaremos de uma classe auxiliar que faça este trabalho. A classe se chama "ordict.py", está disponível neste link.

    Coloque o arquivo no mesmo diretório que o seu arquivo Python e faça a importação da classe desta maneira no começo do seu script:

    Código:
    from odict import *
    Pronto, agora seu script enxerga todos os métodos implementados em "odict.py". Agora vamos usá-lo. Basicamente o script de ordenação será o mesmo, com a diferença que o vetor resultado em vez de ser um dicionário será uma instância (objeto) da classe "OrdeneDict", ficando assim o resultado final:

    Código:
    from odict import *
    ##DIC 1 E O DICIONÁRIO QUE SERA ORDENADO
    dic_1 = {'a':1,'b':3,'c':2}
    ##DICIONARIO AUXILIAR
    dic_aux = dic_1
    ##ORDENANDO DIC_1 PELOS VALORES
    dic_1 = sorted(dic_1.values())
    ##PEGA VALORES DO DIC_1 E VAI MONTANDO DIC_RESULTADO A PARTIR DO MENOR VALOR
    dic_resultado = OrderedDict()
    for i in dic_1:
       for item in dic_aux:
          if item[i] == i:
             dic_resultado[item] = i
    print dic_resultado 
    Bom, é isso aí por enquanto, espero que seja útil.

    Python + SQLite
    Introdução


    Se você precisa de um banco de dados com sintaxe SQL, mas não deseja ter o overhead de instalar um SGBD, o banco de dados SQLite é uma alternativa a ser levada em consideração.

    O SQLite é um banco de dados para ser utilizado embutido com conexão através de bibliotecas próprias da linguagem.

    Aqui mostraremos em poucas linhas como você pode sair por usando SQL para armazenar seus dados.

    Instalando o módulo SQLite no Python

    Como o sistema que foi usado para esse escrever essa dica foi o Ubuntu, usamos o "apt" para instalar a biblioteca sqlite no Python, já que o pacote não veio instalado por padrão:

    # apt-get install python-sqlite


    Vamos ao código:

    Código:
    import sqlite
    
    # Cria a conexão como o banco, que no caso do sqlite
    # corresponde a um arquivo, caso o arquivo não exista ele é criado
    connection = sqlite.connect("demo.db")
    
    # Cria o cursor para enviar comandos
    cur = connection.cursor()
    
    # A partir de agora já podemos executar nossas queries através
    # da função execute do objeto cursor
    # para criar uma tabela podemos usar os seguintes comando
    # Definição da query
    sql = "CREATE TABLE contatos(id NUMBER, nome VARCHAR, fone VARCHAR)"
    
    # Execução da query
    cur.execute(sql)
    
    # Para inserir dados no nosso banco de dados usamos
    sql = "INSERT INTO contatos(id,nome,fone) VALUES(1,'fulano', '999-9999')"
    cur.execute(sql)
    # A linha seguinte é usada para consolidar os dados na base
    connection.commit()
    
    # E finalmente para consultar os dados no nosso banco de dados, usamos
    sql = "SELECT * FROM contatos"
    cur.execute (sql)
    result = cur.fetchall()
    
    for contato in result:
    print "Nome: %s\tFone: %s" %(contato[1],contato[2])

    Conclusão

    Essa dica é apenas o ponto de partida para aqueles que desejam usar o SQLite dentro de seus programas em Python. Através dele é possível aprender a sintaxe do SQL para construir desde programinhas simples para uma agenda até coisas mais complexas.

    Para mais informações:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Acessando o Gmail com script em Python
    Acesse sua conta do Gmail usando seu próprio script Python, através da libgmail.py. É muito simples.

    Criei um script de exemplo que permite que você armazene diversos arquivos na sua conta do Gmail de uma única vez. Ele usa threads, portanto você pode enviar "simultaneamente" diversos arquivos.

    Antes de usar altere seu login e sua senha. Você pode fazer isso dentro do código editando as variáveis ACCOUNT e PW no início do código ou depois que você executar o script pela primeira vez, ele irá criar um arquivo de configuração ~/.gbackup/ . Faz uso da libgmail.py.

    Para baixar o script acesse:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Script Python para consumir Web Services em .Net
    Tive um desafio a poucos dias, que foi consumir Web Services feitos em .Net a partir de um servidor Solaris 10 via processo.

    De todas as soluções possíveis que estive a ver, a melhor foi usar Python.

    Encontrei este exemplo:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Assim fiz o WebServiceGenericClientNet.py:

    Código:
    #!/usr/bin/python
    
    # by eduveks
    
    import sys, httplib, array
    
    try:
        host = ""
        url = ""
        namespace = ""
        method = ""
        params = {}
    
        for arg in sys.argv[1:]:
            if host == "" and arg.find("host=") == 0:
                host = arg[len("host="):]
            elif url  == "" and arg.find("url=") == 0:
                url  = arg[len("url="):]
            elif namespace == "" and arg.find("namespace=") == 0:
                namespace = arg[len("namespace="):]
            elif method == "" and arg.find("method=") == 0:
                method = arg[len("method="):]
            elif arg.find("param_") == 0:
                params[arg[len("param_"):arg.find("=")]] = arg[arg.find("=") + 1:]
    
        SOAP_Request = ""
        SOAP_Request += "<SOAP-ENV:Envelope"
        SOAP_Request += " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\""
        SOAP_Request += " xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\""
        SOAP_Request += " xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\""
        SOAP_Request += " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""
        SOAP_Request += " xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">"
        SOAP_Request += "<SOAP-ENV:Body>"
        SOAP_Request += "<"+ method +" xmlns=\""+ namespace +"\">"
        for param in params.keys():
            SOAP_Request += "<"+ param +">"+ params[param] +"</"+ param +">"
        SOAP_Request += "</"+ method +">"
        SOAP_Request += "</SOAP-ENV:Body>"
        SOAP_Request += "</SOAP-ENV:Envelope>"
    
        http = httplib.HTTP(host)
        http.putrequest("POST", url)
        http.putheader("Host", host)
        http.putheader("User-Agent", "Python")
        http.putheader("Content-type", "text/xml; charset=\"UTF-8\"")
        http.putheader("Content-length", "%d" % len(SOAP_Request))
        http.putheader("SOAPAction", "\""+ namespace + method +"\"")
        http.endheaders()
        http.send(SOAP_Request)
    
        http_response_statuscode, http_response_statusmessage, http_response_header = http.getreply()
        SOAP_Response = http.getfile().read()
        if http_response_statuscode == 200 and http_response_statusmessage == "OK":
            print SOAP_Response[SOAP_Response.find("<"+ method +"Result>") + len("<"+ method +"Result>"):SOAP_Response.find("</"+ method +"Result>")]
        else:
            print "### ERROR ###############"
            if SOAP_Response.find("<faultstring>") > -1:
                print SOAP_Response[SOAP_Response.find("<faultstring>")  + len("<faultstring>"):SOAP_Response.find("</faultstring>")]
            print "Response: ", http_response_statuscode, http_response_statusmessage
            print http_response_header
            print SOAP_Response
    
    except:
        print "### ERROR ###############"
        for err in sys.exc_info():
            print err 
    Para executar o script basta dar permissões de execução e executar:

    # chmod +x WebServiceGenericClientNet.py
    # ./WebServiceGenericClientNet.py host=localhost url=/HelloWorld.asmx namespace=http://tempuri.org/ method=HelloWorld param_strSay=HelloWorld


    O output é:

    HelloWorld

    Os parâmetros do WebServiceGenericClientNet.py são:

    * host: Endereço do servidor
    * url: Endereço do webservice
    * namespace: Namespace do webservice, que pode ser encontrado vendo o WSDL, Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    * method: Método do webservice a ser chamado
    * param_*NOME_DO_PARAMETRO*: Caso o método precise de parâmetros, podem ser definidos assim, atenção a ordem.


    Além de usar este script no Solaris, também acabei por usar este script para chamar web services a partir do .Net/C#, pois são web services que serão atualizados constantemente, com novos métodos e tal, e em vez de ficar atualizando o WSDL basta chamar diretamente com o script a queima-roupa e a configuração da chamada dos web services pode ser feita a partir de configurações em base de dados. Para fazer isto no .Net/C# foi só lançar um processo assim:

    Código:
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.FileName = "C:\Python26\python.exe";
    process.StartInfo.Arguments = "WebServiceGenericClientNet.py host=localhost url=/HelloWorld.asmx namespace=http://tempuri.org/ method=HelloWorld param_strSay=HelloWorld";
    process.StartInfo.WorkingDirectory = "C:\Python26\";
    process.Start();
    string output = process.StandardOutput.ReadToEnd();
    Para mais informações e para acompanhar as atualizações deste script:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Programando páginas da Web com Python
    Se você tem o Apache instalando no seu computador e gostaria de programar para web com Python, aí vai a dica.

    Abra o editor de texto e digite:

    Código:
    #!/usr/bin/env python
    #-*- coding: ISO-8859-1 -*-
    
    #esse print vai mostrar para o apache que é um página HTML através de
    #um cabeçalho HTTP
    print "Content-type: text/html; ISO-8859-1"
    #esse print é muito importante, pois separa o cabeçalho HTTP da página
    #sem ela o apache acusa erro de script
    print
    
    print "<html>"
    print "<head>"
    print "<title>Teste</title>"
    print "</head>"
    print "<body>"
    print "<h1>Isso é um teste</h1>"
    print "</body>"
    print "</html>" 


    Salve esse arquivo na pasta cgi-bin do seu Apache. Acesse essa pasta pelo console e digite:

    $ chmod +x nomedoseucript
    ou
    $ chmod 777 nomedoseuscript

    Ative o servidor e acesse, pelo navegador, o script:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    OBS: Não é necessário a extensão .py.

    Python: Somando valores em um dicionário de strings
    Bom galera, é uma dica simples mas útil em alguns momentos, visto que você pode ter um dicionário como este:

    Código:
    dic = {'a':'10','b':'20','c':'30','d':'40','c':'50'}
    E você quer somar os valores contidos no dicionário, ou seja, sum(dic.values()).

    Um método de fazer isso é usando a função anônima lambda combinada com funções do python, neste caso filter e map.

    Vejam como ficou:
    Código:
    total = sum(filter(lambda elem:elem,(map(lambda dic:float(dic),dic.values()))))
    Onde:

    * a função map que é o 2 elemento da função filter que vai converter todos valores do dicionário dic para float e gerando uma lista de floats;
    * a função filter só é utilizada para formar uma lista com as respostas, ela vai adicionando cada valor convertido no 2 parâmetro, no caso o resultado da função map, que é uma lista de floats a uma lista de resposta que terá todos os termos somados pela função sum e o resultado guardado em total.


    Uma maneira direta que obtém o mesmo resultado é:
    Código:
    total = sum(map(lambda dic:float(dic),dic.values()))
    Mas fica um exemplo de combinação de funções do Python como estudo e também uma forma de utilizar a função lambda, que economiza muito código.


    Usando a função map em vez de for (Python)
    Uma coisa que muita gente não conhece no Python é a função map, vamos analisar esse código que criar uma lista com os quadrados dos números de 0 a 10:

    Código:
    final = []
    
    def retornaquadrado(x):
        return x**2
    
    for item in range(11):
        final.append(quadrado(item))


    Deu pra ver que isso deixa e código muito grande, e pode ser simplificada usando o map, que é um comando parecido com o for, só que mais simples...

    Segue um exemplo:
    Código:
    def retornaquadrado(x):
        return x**2
    
    final = map(retornaquadrado,range(11))
    Sim, essa linha (a definição da função não conta =P) é a mesma coisa que aquele código, e isso pode simplificar muito o seu programa! Espero que aproveite

    Superkaramba sob x86_64
    Tive alguns muitos problemas e muita paciência pra conseguir instalar o Superkaramba sob a arquitetura 64 bits, então resolvi escrever esta dica pra ajudar a galera nessa arquitetura (que são realmente minoria!). A dica vale para o Slamd64 (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...) que é a distro extra-oficial do Slackware portado para 64 bits.

    Vamos lá então:

    O problema de instalar o Superkaramba é que ele não consegue se comunicar direito com as bibliotecas Python 2.3.xx, pois estas foram portadas com caminho diferente da arquitetura 32 bits. Então, aplicativos nativamente 64 bits não conseguem localizá-las. Atualizar tais bibliotecas é o caminho. Baixe-as no link:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    Essa é a biblioteca mais recente (16/10/2005). Instale-a, com os seguintes procedimentos:

    $ tar -xvf Python-2.x.x.tgz
    $ cd Python-2.x.x
    $ ./configure
    $ make
    $ su -c "make install"

    password:

    Depois disso, baixe os fontes do Superkaramba em:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    E execute novamente os comandos (na pasta do download):

    $ tar -xvf superkaramba-0.xx.tar.gz
    $ cd superkaramba-0.xx
    $ ./configure
    $ make
    $ su -c "make install"

    password:

    Inicie o Superkaramba com:

    $ superkaramba


    It's done! A propósito, qualquer biblioteca Python de versão superior à 2.3.xx será bem-vinda! Agora todo programa que precisar do Python para compilar/interpretar encontrará o caminho correto.

    Atualização da blibioteca Python

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    Fonte: vivaoLinux
    Postado Por: RedDeviL
X
Working...
X