Web Spider – Captura Links de Website

Publicado: 23 de fevereiro de 2014 em Hacking

Um Spider simples coleta o conteúdo da Internet

Spider é um programa que visita sites e lê suas páginas e outras informações, a fim de criar entradas para um índice de motor de busca. Os principais motores de busca na Web, todos têm um programa desse tipo, o que também é conhecido como um “crawler” ou um “bot”. Os spiders são normalmente programados para visitar sites que tenham sido apresentados por seus proprietários como novos ou atualizados. Sites inteiros ou páginas específicas podem ser visitados e indexados de forma seletiva. Spiders são chamados de aranhas, porque eles costumam visitar muitos locais, em paralelo, ao mesmo tempo, as suas “pernas” que abrangem uma grande área do “web”. As aranhas podem rastejar através de páginas de um site de várias maneiras. Uma maneira é seguir todos os links de hipertexto em cada página até que todas as páginas foram lidas.

Pernas do Spider

O Web spider usa principalmente o HTTP para olhar e mover-se pela Internet. HTTP é um protocolo orientado à mensagem no qual um cliente se conecta a um servidor e emite pedidos. O servidor fornece uma resposta. Cada pedido e resposta é composto de cabeçalho e corpo, com o cabeçalho fornecendo informações de status e uma descrição do conteúdo do corpo.

Coleta de e-mail

Agora o lado ruim dos crawlers. Infelizmente, pessoas mal intencionadas podem efetuar estragos na Internet. Os crawlers de coleta de e-mail procuram por endereços de e-mail em Web sites que são então utilizados para gerar o spam em massa que vemos diariamente.

A coleta de e-mail pode ser uma das atividades de crawl mais fáceis.

Exemplo:

Requisitos: Package Termcolor – https://pypi.python.org/pypi/termcolor

Neste exemplo em Python executamos o script do nosso Spyder via terminal do linux, passando o nome do web site como parametro e logo nosso Spyder analisa todas as paginas do site e captura todos os links do site.

Este exemplo pode ser modificado para capturar varias outras informações do website.

Executar: python spyder.py http://nomedosite.com

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-

# Estes modulos fazem a maioria do trabalho.
import sys
import urllib2
import urlparse
import htmllib, formatter
from cStringIO import StringIO
from termcolor import colored

def log_stdout(msg):
     """imprime menssagem na tela"""
     print colored(msg,"cyan")

def get_page(url, log):
     """Retorna URL e seus conteudos, log erros."""
     try:
         page = urllib2.urlopen(url)
     except urllib2.URLError:
         log("Retornando Erros : " + url)
         return ''
     body = page.read()
     page.close()
     return body

def find_links(html):
     """Retorna uma lista de links html."""
     # Usa para validar  as urls e retornar as HREFs
     writer = formatter.DumbWriter(StringIO())
     f = formatter.AbstractFormatter(writer)
     parser = htmllib.HTMLParser(f)
     parser.feed(html)
     parser.close()
     return parser.anchorlist

class Spider:

    """
    O coração do programa, encontra todos os links em web site.
    run() contem o loop principal.
    process_page() retorna cada pagina e encontra os links.
    """

    def __init__(self, startURL, log=None):
         # Este metodo seta valores iniciais
         self.URLs = set()
         self.URLs.add(startURL)
         self.include = startURL
         self._links_to_process = [startURL]
         if log is None:
             # Use log_stdout se não providenciar log
             self.log = log_stdout
         else:
             self.log = log

    def run(self):
         # Processa lista de URLs de uma vez
         while self._links_to_process:
             url = self._links_to_process.pop()
             self.log("Retornando: " + url)
             self.process_page(url)

    def url_in_site(self, link):
         # Checa quando o link começa com uma base URL
         return link.startswith(self.include)

    def process_page(self, url):
         # Retorna a pagina e checa o link nela
         html = get_page(url, self.log)
         for link in find_links(html):
             # Manipula oslinks relativos
             link = urlparse.urljoin(url, link)
             self.log("Checking: " + link)
             # Obtendo certeza que este é um novo link
             if link not in self.URLs and self.url_in_site(link):
                 self.URLs.add(link)
                 self._links_to_process.append(link)

if __name__ == '__main__':
     # Este codigo roda quando o script é rodado na linha de comando
     startURL = sys.argv[1]
     spider = Spider(startURL)
     spider.run()
     for URL in sorted(spider.URLs):
         print colored(URL, "blue")

Packages – Python – Linux

Publicado: 23 de fevereiro de 2014 em Python

Uma Package (pacote) é uma coleção de módulos relacionados armazenados em um diretório e subdiretórios.

Um __name__ é um __name__, exceto quando é __ main__

Dentro de um módulo, o nome do módulo (como uma string) é armazenado no nome global __ name__.

Mas há uma exceção: Se o arquivo de módulo é executado como um programa a partir da  linha de comando, Python define __ name__ do módulo para ‘__main__‘.

Este recurso é útil para incluir código (geralmente o código de teste) em um arquivo de módulo que é executado somente quando você iniciar o módulo a partir da linha de comando (digitando: python nomedomodulo.py).

O código fica assim:


if __name__ == '__main__':

do something

Quando você inclui o código que é executado somente sob essas circunstâncias, você não tem que remover o código quando você importa o módulo. Isso porque quando um módulo é importado, __ name__ é o nome do módulo, não ‘__main__‘.

Este código vai fora de quaisquer definição de função ou declarações de importação no módulo, geralmente no final do módulo.

Os efeitos de pacotes

Os pacotes são uma outra maneira de tirar vantagem da capacidade do Python para ocultar a complexidade.

Pacotes tem alguns recursos úteis:

  • Um pacote tem seu próprio namespace.
  • Nomes definidos dentro de um módulo,  incluindo nomes de módulos não conflitam com os nomes definidos em outro lugar.
  • Os pacotes podem conter módulos.
  • Os pacotes podem conter sub pacotes.
  • Pacotes são ideais para armazenar e organizar uma série de características relacionadas.

Requisitos e Orientações Para os Pacotes:

  • Um pacote vive dentro de um diretório e seus sub pacotes vivem dentro de sub diretórios desse diretório (em geral).
  • Assim como um módulo de arquivos nomeia o módulo, um pacote de diretório nomeia o pacote.
  • Isso permite importar itens do pacote, usando a importação no formato packagename.modulename.
  • Um diretório do pacote deve conter um arquivo chamado __ init__.py.

No caso mais simples, __ init__.py é apenas um arquivo vazio. Mas, muitas vezes, contém código que inicializa o pacote. Por exemplo, a melhor maneira de importar um específico sub módulo com um pacote ou sub pacotes particular é carregá-los no arquivo __init__.py.

O arquivo __init__.py às vezes contém a lista: __ all__

Esta lista ajuda código Python executado em diferentes sistemas operacionais. Quando você inclui nomes de módulos em __all__, o comando de importação: from packagename import * – importa apenas estes módulos.

Sobre diretórios e pacotes especiais

Quando Python é instalado, ele cria diretórios específicos para pacotes. Se você armazenar pacotes em um desses diretórios especiais de pacote, é menos provável ter problemas se os seus nomes de pacotes são os mesmos que os nomes dos módulos em outros lugares no caminho Python.

  • Diretório: lib/local-python/  – Este diretório é para pacotes que funcionam da mesma maneira com todas as versões do Python.
  • Diretório: Lib/pythonXX/site-packages/ – Este diretório é para os pacotes que dependem da versão do Python. Alterações XX representam o número da versão do Python.

Estrutura de Packages

Você pode ver melhor como é uma estrutura de packages Python na imagem abaixo:

pacotes

 Exemplo:

Neste exemplo criamos um projeto chamado Prj_Dev01 e na raiz do projeto temos o modulo principal.py, logo temos um pacote chamado devaberto(em Python uma package é apenas um diretório que contém o arquivo __init__.py) e dentro dele temos um modulo chamado msg.py e o arquivo de controle do pacote chamado __init__.py.

Python

Principal.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Principal.py

# Importa pacote
import devaberto.msg

# Importa OS
import os

# Limpa a tela
os.system("clear")

print "Modulo Principal"

print "\n"

devaberto.msg.menssagem("Minha menssagem")
devaberto.msg.msg2('menssagem2')

# Cria uma espera no terminal
raw_input()

__init__.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto

__all__ = ['msg']
# Importa pacote
import msg

msg.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# msg.py

def menssagem (x):
     print x

def msg2(x):
     print x
     print x

Trabalhe como um desenvolvedor

Publicado: 23 de fevereiro de 2014 em Abap, C#, C/C++, Java, Python

can-stock-photo_csp11667034Em computação, um programador, desenvolvedor, coder ou engenheiro de software refere-se a alguém que faz programação de computadores e escreve software.

Um programador pode ser alguém que desenvolve ou faz manutenção de softwares em um grande sistema ou alguém que desenvolve software para uso em computadores pessoais.

Os desenvolvedores profissionais gastam menos de 10 por cento do seu tempo de trabalho escrevendo código, consomem cerca de 60 por cento do tempo de trabalho em um projeto,  na análise de problemas, concebendo soluções, documentando as decisões, depurando, mantendo ou melhorando o  código fonte.

Os 30 por cento restantes do tempo de um desenvolvedor é tomado por reuniões ou simplesmente desperdiçado (Às vezes, não há nenhuma diferença entre reuniões e tempo perdido.)

Se você estiver escrevendo um programa que é maior do que algumas linhas, então não é o bastante apenas sentar e começar a codificação. Você precisa dar três passos para tornar o seu programa o melhor possível.

Os 3 Ds –  Documentação, Design e Depuração

  1. Documentação: Certificar-se de que outras pessoas podem ler o seu programa.
  2. Design: Ter certeza que seu programa resolve o problema certo e está organizado para que seja eficiente e potencialmente reutilizável.
  3. Depuração: Certificar-se de que seu programa não tenha nenhum erro e que ele responda adequadamente quanto a entrada de dados errados.

Documentação

Documentação torna possível ler, usar e manter um programa:

  • Na programação, a documentação é toda a escrita associada ao seu programa que não seja um código.
  • Em uma linguagem de programação, legibilidade é uma virtude nobre.
  • Isso significa que seu código é parte da documentação também.
  • Escolher bons nomes faz parte da documentação!
  • LEMBRE-SE, programação, começa e termina com a documentação.
  • Comece por escrever o problema que o seu programa se destina a resolver.
  • Antes mesmo de começar a escrever o seu programa, é uma boa ideia escrever notas sobre o objetivo do programa.
  • Finja que você precisa explicá-lo para outra pessoa, e se você tem alguém para ler a notas, melhor.
  • Termine, certificando-se de que a documentação ainda corresponde ao programa.

Se você não escrever a documentação, você vai achar que é difícil usar ou manter o seu programa depois de passado seis meses (mesmo se você é a única pessoa que usa o programa).

Design

Projetar é realmente um atalho para duas partes interligadas de programação: análise e design.

O que você realmente quer?

Análise é o processo de determinar o problema que você está tentando resolver. É semelhante ao processo que um arquiteto faz você passar para remodelar a sua cozinha: “O que você realmente quer?”. Por exemplo, você pode querer escrever um programa para automatizar seus dados de backup. Essa é uma descrição geral, mas você precisa de uma lista mais específica das tarefas que você deseja que o programa realize, como:

  • Quantas vezes você quer fazer os backups?
  • Você quer fazer backup de todos os dados ou apenas dados alterados desde o último backup?
  • Quanto tempo você quer manter os backups?

Se você está remodelando sua cozinha, então este é o ponto onde o arquiteto elabora um projeto. O projeto não é a própria cozinha; é o plano que deve ser seguido para a construção da nova cozinha. se você está escrevendo um programa, você começa a construir o contorno do programa, que é semelhante a uma planta. Na verdade, as pessoas que se concentram na análise e concepção de programas são frequentemente chamados de arquitetos de software.

A Pseudo codificação de seus pensamentos

Uma maneira de projetar seu programa é criando um esboço do tipo, usando o que é chamado de pseudo-código. Você escreve um esboço do que o seu programa vai fazer, utilizando as estruturas que você vai precisar usar quando você escrever o programa (como definições de classe e função, as declarações), mas você não deve se preocupar com os detalhes de sintaxe necessárias para escrever código de trabalho.

Pseudo-código tende a assemelhar-se a programas reais, por isso leva menos esforço para converter pseudo-código em código funcionando. quando o processo de pseudo-codificação é concluída, os detalhes são fáceis de escrever.

Depuração

Um bug é um erro em um pedaço do software que faz com que ele funcione de forma inadequada ou retorne resultados incorretos.

Ensine a Velhos Bugs  Novos Truques:

O uso da palavra bug (pau em português) já era comum antes do software ser inventado, por exemplo, Thomas Edison usou em 1878 para descrever problemas com suas invenções. Algumas pessoas vão dizer-lhe, porém, que o termo deriva de um incidente no qual foi encontrado um inseto real que estava causando falhas dentro de um computador no início de 1947.

Embora um bug seja mais velho do que escrever programas, depuração tem sido uma parte inerente da escrita de programas desde que as pessoas começaram a escrever softwares. Um dos primeiros cientistas da computação, Maurice Wilkes, é conhecido por ter dito: “Eu me lembro do momento exato em que eu percebi que uma grande parte da minha vida a partir de então ia ser passar a encontrar erros em meus próprios programas.”.

Escrever um programa complexo é algo como a concepção de um edifício. O arquiteto restringe inclusão do tempo, dinheiro, bom gosto, e os limites estruturais dos materiais. Programação também requer um equilíbrio entre necessidades múltiplas, muitas vezes incluindo o tempo, o dinheiro, a solicitações de recursos de vários grupos de pessoas, e da disponibilidade de quantidades suficientes de cafeína.

Um exemplo de um bom trabalho é com bom humor, o pythonista Tim Peters contribuiu com  19 diretrizes para um bom código Python. Considerado a melhor destilação da filosofia da programação 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 suficiente para quebrar as regras.
Embora praticidade vença a pureza.
Erros nunca devem passar em silêncio.
A menos que explicitamente silenciados.
Diante da ambiguidade, recuse a tentação de adivinhar.
Deve haver um – e preferencialmente só um – modo óbvio para fazer isso.
Apesar de que o caminho pode não ser óbvio à primeira vista, a menos que você seja holandês.
Agora é melhor do que nunca.
Embora nunca é muitas vezes melhor do que agora.
Se a implementação é difícil de explicar, é uma má ideia.
Se a implementação é fácil de explicar, pode ser uma boa ideia.
Namespaces são uma grande ideia – vamos fazer mais desses!

-Tim Peters

Versão original: http://www.python.org/doc/humor/#zen

Python é uma linguagem de programação completa, que contém a funcionalidade exigida por programadores para escrever todos os tipos de código, de fazer filmes até para a previsão do tempo. Python é uma linguagem relativamente moderna. É muito poderoso e contém uma biblioteca de funções capazes de muitas tarefas diversificadas. No entanto, nem tudo o que vai achar útil é incorporado Python.

Felizmente, há um grande número de pacotes adicionais que são escritos especificamente para computação científica. Estes pacotes são bibliotecas de comandos extras que acrescentam mais funcionalidades do que o Python possui por default.

O objetivo do Spyder é fornecer um ambiente que faz com que seja fácil de escrever, rodar e debugar códigos Python, além de instalar vários módulos científicos como: NumPy, Matplotlib e SciPy.

Sites:

http://www.numpy.org/
http://matplotlib.org/
http://www.scipy.org/

Spyder

Spyder (anteriormente conhecido como Pydee) é um ambiente de desenvolvimento interativo poderoso para a linguagem Python com edição avançada, teste interativo, depuração e recursos de introspecção.

O Spyder IDE também pode ser usado como uma biblioteca que fornece poderosos widgets relacionados do console para as suas aplicações baseadas em PyQt – por exemplo, pode ser usado para integrar um console de depuração diretamente no layout de sua interface gráfica.

Recursos:

  • Editor : Breakpoints, os pontos de interrupção e pontos de interrupção condicionais para usar com o depurador python (APO).
  • Console : Executar um script todo ou qualquer parte dele a partir do Editor
  • Explorador de variáveis : Ver as variáveis ​​locais, enquanto você está depurando
  • Inspetor de Objetos : Acesso rápido a documentação é uma obrigação para todos os programadores, seja para explorar novas bibliotecas ou se lembrar de como usar um pedaço de código
  • Project Manager : Gerenciar grandes projetos de programação com diversas facilidades.
  • Ajuda on-Line : Explorar documentação gerada dinamicamente de todos os módulos instalados
  • Pylint : Analise seu código-fonte para prever erros e sinais de má qualidade de codificação.
  • Preferencias – Configure Spyder como você deseja com uma grande variedade de preferências disponíveis.

Código Fonte: http://code.google.com/p/spyderlib/
MIT License: http://opensource.org/licenses/mit-license.php

Requisitos:

Sphinx é uma ferramenta que torna mais fácil criar documentação inteligente e bonita, escrita por Georg Brandl e licenciado sob a licença BSD.

Ela foi originalmente criada para a nova documentação do Python, e tem excelentes facilidades para a documentação dos projetos em Python.

Captura de tela de 2014-02-22 17_28_10

site: http://sphinx-doc.org/

Instalação Linux

Entre no Terminal e digite os comando abaixo:

  1. sudo apt-get install python-qt4 python-sphinx
  2. sudo apt-get install spyder

Configuração da IDE

Vamos criar uma configuração para que o Spyder rode os aplicativos Python direto no terminal do Linux, você poderá  interpretar scripts Python como na figura abaixo:

Captura de tela de 2014-02-22 17_18_32

Instruções:

  1. No menu View, Windows and Toolbars escolha Project Explorer.
  2. No menu Tools, Preference escolha: RUN e selecione Execute in a external System Terminal.
  3. No menu File, escolha New Project e coloque o seguinte nome: HelloWorldSpyder.
  4. Clique no novo projeto com o botão direito e escolha New Module e nomeie :hello.py.
  5. Digite o codigo abaixo e na barra de tarefas clique em RUN.

Exemplo:

Neste exemplo criamos o famoso aplicativo Hello World e utilizamos a IDE Spyder para Linux, interpretando o script Python com saída para o Terminal:

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# hello.py

# Importa OS
import os
# Limpa a tela
os.system("clear")

print "Hello World Spider"

# Cria uma espera no terminal
raw_input()

Spyder – Biblioteca Cientifica

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# MatPlotLib Example
# Ciência.py

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def data_gen():
     t = data_gen.t
     cnt = 0
     while cnt < 1000:
         cnt+=1
         t += 0.05
         yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
data_gen.t = 0

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.set_ylim(-1.1, 1.1)
ax.set_xlim(0, 5)
ax.grid()
xdata, ydata = [], []
def run(data):
     # update the data
     t,y = data
     xdata.append(t)
     ydata.append(y)
     xmin, xmax = ax.get_xlim()

     if t >= xmax:
         ax.set_xlim(xmin, 2*xmax)
         ax.figure.canvas.draw()
     line.set_data(xdata, ydata)

     return line,

ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=10,     repeat=False)
plt.show()

Dicionários são encontrados às vezes em outras linguagens de programação como “memórias associativas” ou “matrizes associativas”. Diferentemente de sequências que são indexadas por uma série de números, os dicionários são indexados por chaves, que podem ser de qualquer tipo imutável; strings e os números podem ser sempre chaves.

Python - Coleções

Python – Coleções

O que os dicionários são

Um dicionário é:

  • Uma matriz associativa.
  • Um mapeamento de chaves para valores.
  • Um recipiente (coleta), que tem valor de chave pares.

Um dicionário tem os seguintes recursos:

  • Capacidade de interagir sobre chaves ou valores ou valor de chave pares.
  • Capacidade de adicionar valor de chave pares dinamicamente.

Sintaxe:

dicionario = {chave : valor}

Exemplo:

Neste exemplo criamos um dicionário em ordem alfabética com nome e e-mail de pessoas, usamos as funcionalidades de excluir, adicionar novos itens ao dicionário.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# dicionario.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Dicionario

dicionario = { "Camille" : "camille@devaberto.com", "Eduarda" : "eduarda@devaberto.com", "Rafaela" : "rafaela@devaberto.com", "Ricardo" : "ricardo@devaberto.com", "Isabela" : "isabela@devaberto.com"}
print colored ("Dicionario\n".center(70),"yellow")
print colored (dicionario,"blue") 
print ""

# Imprime Agenda
print colored ("Agenda\n".center(70),"yellow")

for key, val  in sorted(dicionario.items()):
    print colored(str(key).rjust(20), "blue"), colored(str(val).rjust(50),"green")

# Tamanho do dicionario
print len(dicionario), " entrada(s) no dicionario\n"

# Deleta e Insere uma chave

print colored("Excluido: " + str(dicionario["Isabela"]), "red")
del dicionario["Isabela"]

# Insere uma chave

dicionario["Samanta"] = "Samanta@devaberto.com"
print colored("Incluido no dicionario: " + str(dicionario["Samanta"]) + "\n", "cyan")

# Imprime Nova Agenda
print colored ("Nova Agenda\n".center(70),"yellow")

for key, val  in sorted(dicionario.items()):
    print colored(str(key).rjust(20), "blue"), colored(str(val).rjust(50),"green")

Imagem  —  Publicado: 22 de fevereiro de 2014 em Python

Tuples – tuplas – Python – Linux

Publicado: 22 de fevereiro de 2014 em Python

Em matemática, ciência da computação, linguística, e filosofia um TUPLE é uma lista ordenada de elementos. Na teoria dos conjuntos, um (ordenado) n-tuple é uma sequência (ou lista ordenada) de n elementos, onde n é um número inteiro não negativo.

Em linguagens de programação, tais como Python, um TUPLE (pronuncia TUH-pul) é um conjunto ordenado de valores. O separador para cada valor é uma vírgula. Os usos comuns para o TUPLE como um tipo de dados são:

  • A passagem de uma série de parâmetros a partir de um programa para outro.
  • A que representa um conjunto de atributos de valor em um banco de dados relacional.  Tuplas podem conter uma mistura de outros tipos de dados.

Uma tupla (em português)  é uma sequência de valores. Os valores podem ser de qualquer tipo, e eles são indexados por números inteiros, então nesse aspecto tuplas são muito parecidas com listas. A diferença importante é que as tuplas são imutáveis​​.

Sintaxe:

tuples = ( 0, “STRING”)

Exemplo:

Neste exemplo utilizamos uma tupla para passar parâmetros para exibir uma simples saída de tela.

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# tuplas.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Declara variave Tuples
# Tuples é otimo para enviar parametros

t =  (10,20,70,"blue","yellow","red","green","white","cyan")

# Monta saida de tela usando tuplas

print colored("Lista\n".center(t[2]), t[4])

print colored("codigo".rjust(t[0]), t[3]),   colored("Banda".rjust(t[1]), t[3]),  colored("Album".rjust(t[1]), t[3]),  colored("Vendas\n".rjust(t[1]), t[3])

print colored("14242".rjust(t[0]), t[7]),   colored("Metallica".rjust(t[1]), t[6]),  colored("Load".rjust(t[1]), t[8]),  colored("(0) Zero\n".rjust(t[1]), t[5])

print colored("14245".rjust(t[0]), t[7]),   colored("Metallica".rjust(t[1]), t[6]),  colored("Kill \'em All".rjust(t[1]), t[8]),  colored("5.000.000".rjust(t[1]), t[5])

Se um erro ocorrer dentro da clausula TRY então automaticamente o interpretador executa a instrução EXCEPT, existem vários outros parâmetros  de tratamento de exceções em Python.

Python - Try...Excpet...Raise

Python – Try…Except…Raise

A declaração RAISE permite ao programador forçar uma exceção especifica.

Sintaxe:

TRY:

instrução

EXCEPT:

instrução

Exemplo:

Neste exemplo simplesmente geramos duas exceções clássicas, a primeira é uma divisão por zero e a segunda onde forçamos um erro no qual nos definimos uma mensagem exclusiva.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# erros.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Tratamento de erros

numero1 = 5
numero2 = 0

# Tratamento de erros -  Divisões por 0 geram erro.

print colored("Erro numero 1: Não para a execução do programa\n".center(70), "yellow")

try:
   print  numero1 / numero2
except:
   print colored("Impossivel dividir por zero.","red", attrs=["reverse", "blink"])

# Criando um novo Erro

print colored("Erro numero 2: Para a execução do programa\n".center(70), "yellow")

try:
    raise NameError( colored("Este é o meu novo erro.\nErro em outra linha." , "red"))
except NameError:
    print colored("Erro gerado propositalmente\nErro linha 2.\nErro linha 3.", "red", attrs=["reverse","blink"])
    raise

I/O – Open, Read, Write, Seek – Python – Linux

Publicado: 21 de fevereiro de 2014 em Python

Python torna muito simples a tarefa de trabalhar com arquivos.

open () – retorna um objeto de arquivo, e é mais comumente usado com dois argumentos:

Sintaxe:

open (nome do arquivo, modo).

Modos de Arquivos

  • ‘r’ –  quando o arquivo só será lido.
  • ‘w’ –  para apenas escrever (um arquivo existente com o mesmo nome será apagado).
  • ‘a’  – abre o arquivo para anexar (append).
  • ‘r +’ –  abre o arquivo para leitura e escrita.
  • ‘b’ – anexado ao modo abre o arquivo em modo binário.

Instruções

read () – Para ler o conteúdo do arquivo.

seek () – Posiciona o cursor em um ponto do arquivo: seek (colunas, posição). A posição 0 é o  início do arquivo, 1 usa a posição do arquivo atual e 2 usa o final do arquivo como ponto de referência. Se a posição é omitida o padrão é 0.

readline () – Lê uma única linha do arquivo.

write (string) – Escreve o conteúdo da string para o arquivo, retornando o número de caracteres escritos.

close () – Para fechar o aquivo e liberar todos os recursos do sistema tomados pelo arquivo aberto.

Exemplo:

Neste exemplo você deve primeiro criar um arquivo texto no mesmo diretório de onde executa seu programa, para este exercício vamos abrir o arquivo, ler o arquivo, gravar uma linha no final do arquivo e fechar o arquivo:

Python

Arquivo #1 – texto.txt

Desenvolvimento Aberto

Topicos

Ler um texto
escrever um texto

Arquivo #2 – Código Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# arquivo.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

#Lê um texto

with open("texto.txt","r+") as arquivo:
      texto = arquivo.read()

print colored("Texto\n".center(70),"yellow")
print colored(texto,"blue")

print colored("Escreve Linha\n".center(70),"yellow")

# Escreve um arquivo
# Abre o arquivo
arquivo = open("texto.txt","r+")

# Posiciona no final do
arquivo. arquivo.seek(0,2)

# Escreve no Arquivo
arquivo.write("Adiciona uma Linha\n")

# Fecha um arquivo
arquivo.close()

# Lê o arquivo novamente
with open("texto.txt","r+") as arquivo:
      texto = arquivo.read()
print colored(texto,"green")

Se você quiser mais controle sobre a formatação de sua saída do que simplesmente imprimindo valores separados por espaços e também colorir os textos de saida no terminal do linux.

A função str () é utilizado para retornar representações de valores que são bastante legível.

A função repr () destina-se a gerar representações que podem ser lidos pelo interpretador  para os objetos que não têm uma representação específica para o consumo humano. O repr () de uma string adiciona aspas e barras invertidas.

o str.rjust(), que justifica a direita uma string em um campo de uma determinada largura, preenchendo-a com espaços à esquerda. Existem métodos semelhantes str.ljust () e str.center ().

() str.format, os colchetes e caracteres dentro deles (chamados de campos de formato) são substituídos com os objetos passados ​​para o método

O metodo str.zfill(), que preenche uma string numérica com zeros à esquerda.

Termcolor (modulo), proporciona formatação ANSII e permite a saída de cores no terminal, usando a função colored(). O modulo termcolor não vem instaldo por default  e precisa ser instalado.

Python - Termcolor

Python – Termcolor

Instalar o Modulo TermColor:

  1. Faça o download do arquivo: https://pypi.python.org/pypi/termcolor.
  2. Descompacte o arquivo e entre na pasta descompactada termcolor.
  3. Pelo terminal navegue a o diretorio descompactado.
  4. Digite: sudo python setup.py install.
  5. O modulo termcolor esta pronto para uso.

Exemplo:

Neste exemplo criamos duas Arrays e formatamos a saída de tela usando funções de tabulação e letras coloridas no terminal do Linux:

Python


#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Elegante.py

# Importa OS
import os

# Importa Cores
from termcolor import colored

# Limpa a tela
os.system("clear")

# Cria Arrays
bandas = ["Alice in Chains", "Nirvana",  "Stone Temple Pilots", "SoundGarden", "Pearl Jam", "Screaming Trees"]

baladas =['Down in a Hole', "Something in the way", "Creep", "Black Hole Sun", "Black", "Dollar Bill"]

#imprime a tela
print colored("Baladas Grunge:\n",'blue', attrs=['reverse','blink'])

print colored("Lista das baladas classicas do anos 90\n".center(70),"yellow")

print colored("{0:10s} {1:25s} {2:5s} {3:25s}".format("Cod:","Banda","","Musica"),"green")

print '\n'

# imprime Arrays
for i in range(len(bandas)):
     print repr(str(i).zfill(5)).rjust(5), repr(bandas[i]).rjust(25), repr('>>>').rjust(5), repr(baladas[i]).rjust(25)

num =  len(baladas)
print "\n", colored("Total de ","magenta"),colored(num,"blue"), colored( "  musicas listadas","red")

Open SQL – Select , Insert, Update e Delete – Abap

Publicado: 20 de fevereiro de 2014 em Abap

Open SQL consiste em um conjunto de instruções ABAP que executam operações no banco de dados do sistema central do R/3. Os resultados das operações e as mensagens de erro são independentes do sistema de base de dados em uso. O Open SQL fornece, assim, uma sintaxe e semântica uniforme para todos os sistemas de banco de dados suportados pela SAP. Programas ABAP que utilizam apenas instruções Open SQL funcionará em qualquer sistema R/3, independentemente do sistema de banco de dados em uso. Instruções Open SQL só podem trabalhar com tabelas de banco de dados que foram criados no Dicionário ABAP.

Open SQL: Definição

Insert

A instrução Open SQL serve para inserir dados em uma tabela de banco de dados. Ela permite que você insira uma ou mais linhas na tabela do banco de dados alvo. Você pode especificar o destino da tabela de banco de dados estática ou dinamicamente.

Mais informações: Insert

Select

É uma instrução Open SQL para leitura de dados a partir de uma ou várias tabelas de banco de dados em objetos de dados. A instrução SELECT lê um conjunto de resultados a partir das tabelas do banco de dados especificados na fonte, e atribui os dados do conjunto de resultados para os objetos de dados especificados no alvo. Você pode restringir o conjunto de resultados usando a adição WHERE.

Mais informações: Select

UPDATE

A instrução UPDATE permite a atualização dos valores das colunas selecionadas de linhas de uma tabela de banco de dados.

Mais informações: Update

DELETE FROM

Para excluir linhas de qualquer tabela use a instrução DELETE FROM. Você pode usar a chave da tabela para encontrar e apagar uma única linha, eliminar um conjunto de linhas que atendam a uma condição, ou encontrar e apagar entradas duplicadas. Se a tabela tem uma chave não-exclusiva e há entradas duplicadas, a primeira entrada é eliminada.

Mais informações: Delete

Exemplos:

Neste exemplo usamos duas tabelas do FLIGHT MODEL e inserimos e selecionamos dados aleatórios nas tabelas SCURX, SBUSPART, ressaltando que ainda não precisamos respeitar nenhuma chave estrangeira nas tabelas standards, mais tarde usaremos BAPIs para atualizar consistentemente estas tabelas.

Abap

*&---------------------------------------------------------------------*
*& Report  ZMOEDA
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Flight Model - Moeda - Select e Insert
*&---------------------------------------------------------------------*

REPORT  ZMOEDA.

* Define a Tabela

TABLES SCURX.
TABLES SBUSPART.

* Cria as Arrays para os campos

DATA matriz  TYPE SCURX.
DATA matriz2 TYPE SBUSPART.

* Insere dados na tabela

matriz-currkey = 1.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

matriz-currkey = 2.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

matriz-currkey = 3.
matriz-currdec = 2.
INSERT INTO SCURX VALUES matriz.

* Seleciona dados da Tabela.

WRITE : / 'Tabela de Moedas', / .

SELECT * INTO matriz FROM SCURX.
  WRITE : / 'Chave da Moeda:', matriz-currkey, 'Decimais: ', matriz-currdec, /.
ENDSELECT.

* Insere dados na tabela SBUSPART

matriz2-mandant = '001'.
matriz2-buspartnum = 1.
matriz2-contact = 'Desenvolvimento Aberto'.
matriz2-contphono = '55 5555-55-55'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.

matriz2-mandant = '001'.
matriz2-buspartnum = 2.
matriz2-contact = 'GNU - Open Source'.
matriz2-contphono = '55 9999-99-99'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.

matriz2-mandant = '001'.
matriz2-buspartnum = 3.
matriz2-contact = 'SAP AG - Airlines'.
matriz2-contphono = '55 6666-66-66'.
matriz2-buspatyp = '01'.
INSERT INTO SBUSPART VALUES matriz2.
* Seleciona dados da tabela SBUSPART

WRITE : / 'Tabela de Linhas Aereas', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.

* Altera dados nas tabelas

UPDATE SBUSPART SET contact = 'Sem Contato cadasrado' WHERE buspartnum = 3.

WRITE : / 'Tabela de Linhas Aereas ALTERADA', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.

* Deleta dados da tabela

DELETE FROM SBUSPART WHERE buspartnum = 3.

WRITE : / 'Tabela de Linhas Aereas Deletada', / .

SELECT * INTO matriz2  FROM SBUSPART.
  WRITE : / 'Mandante:', matriz2-mandant ,
          / 'Numero do Parceiro:', matriz2-buspartnum,
          / 'Contato:', matriz2-contact,
          / 'Telefone:', matriz2-contphono, 'Parceiro de negocio:', matriz2-buspatyp, /.
ENDSELECT.