About

Swaroop C H is 27 years of age. He graduated in B.E. (Computer Science) from PESIT, Bangalore, India. He has previously worked at Yahoo! and Adobe.

More about

Page
Personal tools
COLLECTION
Collection

Python pt-br:Biblioteca Padrao

From Notes

Jump to: navigation, search

Contents

[edit] Introdução

A Biblioteca Padrão do Python contém um vasto número de módulos úteis e é parte de todas as instalações de Python. É importante conhece-la, uma vez que muitos problemas podem ser resolvidos rapidamente se você estiver familiarizado com o grande número de coisas que estas bibliotecas podem fazer.

Nós iremos explorar alguns dos módulos mais usados desta biblioteca. Você pode encontar detalhes completos para todos os módulos da Biblioteca Padrão do Python na seção 'Library Reference' da documentação que vem com sua instalação do Python.

Vamos explorar alguns módulos úteis.

Nota
Se você achar estes tópicos muito avançados, você pode pular este capítulo. No entanto, eu realmente recomendo que você volte para estudar este capítulo quando você estiver familiarizado com a programação usando Python.

[edit] Módulo sys

O módulo sys contém funcionalidades específicas do sistema. Nós já vimos que a lista sys.argv contém os argumentos da linha de comando.

Suponha que nós desejemos checar a versão do Python que está sendo usada para se assegurar que estamos usando a versão 3. O módulo sys nos dá tal funcionalidade.

>>> import sys
>>> sys.version_info
(3, 0, 0, 'beta', 2)
>>> sys.version_info[0] >= 3
True

Como funciona:

O módulo sys tem a tupla version_info que nos dá informações sobre a versão do Python. O primeiro valor é a versão principal. Nós podemos verificar a versão, por exemplo, para garantir que o programa só rode sob o Python 3.0:

#!/usr/bin/python
# Filename: checarversao.py
import sys, warnings
if sys.version_info[0] < 3:
    warnings.warn("Necessário Python 3.0 para rodar este programa",
        RuntimeWarning)
else:
    print('Prosseguir normalmente')

Saída:

   $ python2.5 checarversao.py
   checarversao.py:6: RuntimeWarning: Necessário Python 3.0 para rodar este programa
     RuntimeWarning)
   
   $ python3 checarversao.py
   Prosseguir normalmente

Como funciona:

Nós usamos um outro módulo da biblioteca padrão chamado warnings, que é usado pra mostrar avisos para o usuário final. Se a versão do Python não for 3.0 ou superior, nós mostramos o aviso correspondente.

[edit] Módulo logging

E se você desejar armazenar mensagens de depuração ou outras mensagens importantes, de forma que você possa verificar se seu programa está rodando da forma que você esperava? Como armazenar estas mensagens? Isso pode ser feito usando o módulo logging.

#!/usr/bin/python
# Filename: use_logging.py
import os, platform, logging
 
if platform.platform().startswith('Windows'):
    logging_file = os.path.join(os.getenv('DIRETÓRIOINICIAL'), os.getenv('CAMINHO'), 'test.log')
else:
    logging_file = os.path.join(os.getenv('HOME'), 'test.log')
 
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s : %(levelname)s : %(message)s',
    filename = logging_file,
    filemode = 'w',
)
 
logging.debug("Início do programa")
logging.info("Fazendo alguma coisa")
logging.warning("Terminando agora")

Saída:

   $python use_logging.py
   Logging to C:\Users\swaroop\test.log

Se nós verificarmos o conteúdo de test.log, veremos algomo como isto:

   2008-09-03 13:18:16,233 : DEBUG : Início do programa
   2008-09-03 13:18:16,233 : INFO : Fazendo alguma coisa
   2008-09-03 13:18:16,233 : WARNING : Terminando agora

Como funciona:

Nós usamos três módulos da biblioteca padrão - o módulo os para interagir com o sistema operacional, o módulo platform para informações sobre a plataforma, i.e. o sistema operacional, e o módulo logging para registrar informações.

Inicialmente, nós verificamos qual o sistema operacional que estamos usando, verificando a string retornada por platform.platform() (para mais informações, veja import platform; help(platform) no interpretador Python). Se for o Windows, nós apontamos o diretório inicial, o caminho e o nome do arquivo no qual queremos armazenar a informação. Juntando estas três partes, nós teremos a localização completa do arquivo. Para outras plataformas, nós precisamos conhecer apenas a pasta home do usuário e assim teremos a localização completa do arquivo.

Nós usamos a função os.path.join() para juntar estas três partes da localização. O motivo de usar uma função especial ao inves de apenas somar as strings, é que esta função se assegura de que a localização completa esteja de acordo com o formato esperado pelo sistema operacional.

Nós configuramos o módulo logging para escrever todas as mensagens no arquivo especificado, num formato específico.

Finalmente, nós podemos armazenar mensagens úteis para depuração, informação, avisos ou mensagens críticas. Uma vez que o programa tenha rodado, nós podemos verificar este arquivo e, assim, saberemos o que aconteceu no programa, mesmo que nenhuma informação tenha sido mostrada para o usuário durante seu funcionamento.

[edit] Módulos urllib e json

Não seria divertido se nós pudéssemos escrever nossos próprios programas de busca para internet? Vamos descobrir como fazê-los.

Isto pode ser feito usando-se alguns módulos. Primeiro o módulo urllib que podemos usar para obter qualquer página da internet. Poderemos usar o Yahoo! Search para pesquisar resultados e, por sorte, eles podem nos dar os resultados num formato chamado JSON, que podemos analisar facilmente graças ao módulo embutido json da biblioteca padrão.

Nota
Este programa ainda não funciona devido ao que parece ser um bug no Python 3.0 beta 2.
#!/usr/bin/python
# Filename: yahoo_search.py
 
import sys
if sys.version_info[0] != 3:
    sys.exit('Este programa precisa do Python 3.0')
 
import json
import urllib, urllib.parse, urllib.request, urllib.response
 
# Obtenha seu próprio APP ID em http://developer.yahoo.com/wsregapp/
YAHOO_APP_ID = 'jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8.lBSfPhwr'
SEARCH_BASE = 'http://search.yahooapis.com/WebSearchService/V1/webSearch'
 
class YahooSearchError(Exception):
    pass
 
# Obtido de http://developer.yahoo.com/python/python-json.html
def search(query, results=20, start=1, **kwargs):
    kwargs.update({
        'appid': YAHOO_APP_ID,
        'query': query,
        'results': results,
        'start': start,
        'output': 'json'
    })
    url = SEARCH_BASE + '?' + urllib.parse.urlencode(kwargs)
    result = json.load(urllib.request.urlopen(url))
    if 'Error' in result:
        raise YahooSearchError(result['Error'])
    return result['ResultSet']
 
query = input('Pelo que você quer procurar? ')
for result in search(query)['Result']:
    print("{0} : {1}".format(result['Title'], result['Url']))

Como funciona:

Nós podemos obter resultados de um determinado site, fornecendo o texto que se deseja procurar em um formato específico. Nós devemos especificar diversas opções, que nós juntamos usando o formato key1=value1&key2=value2, que é usado pela função urllib.parse.urlencode().

Então, por exemplo, abra este link em seu navegador e você vera 20 resultados, iniciando do primeiro, para a busca das palavras "byte of python". Este endereço nos dá os resultados no formato JSON.

Nós realizamos a conexão a este URL usando a função urllib.request.urlopen() e passando o arquivo obtido para json.load() que irá ler seu conteúdo e simultâneamente converte-li em um objeto Python. Então nós usamos um loop nestes resultados para mostrá-los ao usuário final.

[edit] O Módulo da Semana

Há muito mais para ser explorado na biblioteca padrão, tal como depuração, uso de opções em linha de comando, expressões comuns e muito mais.

A melhor forma de se aprofundar na biblioteca padrão é ler os excelentes artigos 'Python Module of the Week' de Doug Hellmann.

[edit] Sumário

Nós vimos algumas das funcionalidades de alguns módulos da Biblioteca Padrão do Python. É recomendável que você navegue pela documentação da Biblioteca Padrão do Python para ter uma ideia de tudo que os módulos são capazes de fazer.

A seguir, nós veremos vários aspectos sobre Python que farão nosso tour mais completo.



Please add your comments by clicking on the 'Discussion' link in the left sidebar.