Python Cookbook David Beazley Brian K. Jones



Documentos relacionados
Jonathan Stark Brian Jepson

Novatec Editora Ltda. [2014].

PDF Explicado John Whitington

Desenvolvimento de Grandes Aplicações Web

Google Analytics Justin Cutroni

Aprendendo. Unix no OS X. Mountain Lion. Mergulhando no Terminal e no Shell. Dave Taylor. Novatec

Keith Wood. Apresentação de Dave Methvin. Novatec

Brandon Rhodes John Goerzen

Desenvolvendo Websites com PHP

Padrões de Projeto em PHP

Julia Elman e Mark Lavin. Novatec

Aprendendo Programação. ios. Alasdair Allan. Novatec

David Hows Peter Membrey Eelco Plugge

Pete Goodliffe. Novatec

Padrões JavaScript Stoyan Stefanov

Design Centrado no Usuário

Luiz Carlos Querino Filho

jquery Cookbook Comunidade de Desenvolvedores jquery

Pramod J. Sadalage Martin Fowler

Crie Seu Próprio Site

Novatec Editora Ltda

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

Wilson Moraes Góes. Novatec

Criando Relatórios com PHP

Adail Henrique Spínola Horst Aécio dos Santos Pires André Luis Boni Déo. Novatec

Primeiros Passos com o Raspberry Pi

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Ricardo Kléber M. Galvão. Novatec

Copyright 2008, 2013 da Novatec Editora Ltda.

Ricardo R. Lecheta. Novatec

Ademir C. Gabardo. Novatec

Josh Lockhart. Novatec

A Arte de SEO. Eric Enge, Stephan Spencer, Jessie Stricchiola e Rand Fishkin Introdução de John Battelle. Novatec

Wilson Moraes Góes. Novatec

Aprendendo Cocoa com Objective-C Paris Buttfield-Addison Jonathon Manning

Zend. Framework. Componentes Poderosos para PHP. Flávio Gomes da Silva Lisboa. Novatec

Hélio Engholm Jr. Novatec

Harrison Kinsley Will McGugan

Josh Pauli Revisão técnica Scott White. Novatec

Criando Aplicações Gráficas com PHP

Equipes de Software. Um guia para o desenvolvedor de software se relacionar melhor com outras pessoas. Brian W. Fitzpatrick Ben Collins-Sussman

Ricardo Lino Olonca. Novatec

Lojas Virtuais com. Magento. André Nobrega Gugliotti. Novatec

JQuery. A Biblioteca do Programador JavaScript. 3ª Edição Revisada e ampliada. Maurício Samy Silva. Novatec

Desenvolvendo Websites com PHP

Excel Avançado. 2ª Edição. Antonio Fernando Cinto Wilson Moraes Góes. Novatec

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Prova de pré-requisito

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Desenvolvendo para. Windows 8. Aprenda a desenvolver aplicativos para Windows Phone 8 e Windows 8. Ricardo R. Lecheta. Novatec

Allen B. Downey. Novatec

Faça um Site PHP 5.2 com MySQL 5.0 Comércio Eletrônico

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

Maestro. Arthur Kazuo Tojo Costa Universidade Federal de São Carlos Campus Sorocaba Bacharelado em Ciência da Computação

Google Android para Tablets

João Eriberto Mota Filho

Defenda sua base com circuitos simples, Arduino e Raspberry Pi

Sumário. Introdução ao Universo Linux Parte I

2ª EDIÇÃO. André Milani. Novatec

Introdução às. Expressões Regulares. Michael Fitzgerald. Novatec

CSI IT Solutions. Facilidade de uso

Versão /10. Xerox ColorQube 9301/9302/9303 Serviços de Internet

Manual do usuário. Softcall Java. versão 1.0.5

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS COTAS DE DISCO. Professor Carlos Muniz

Camila Porto. Novatec

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

As Leis Fundamentais do Projeto de Software

Sistemas Distribuídos

Usar FTK Imager para gerar evidências, exportar arquivos de evidências, criar imagens forenses e converter imagens existentes.

Software de gerenciamento de impressoras

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

ESTUDO DE CASO WINDOWS VISTA

Como Configurar Catálogos de Correio Eletrônico com o MDaemon 6.0


Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Outlook Apresentação

Rails 3 Básico Cloves Carneiro Jr. Rida Al Barazi

Especificações da oferta Gerenciamento de dispositivos distribuídos: Gerenciamento de ativos

CSAU Guia: Manual do CSAU 10.0 como implementar e utilizar.

AFRE. a. ( ) Instalando um programa gerenciador de carregamento, como o LILO ou o GRUB. a. ( ) Data Werehouse ; Internet ; Linux

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Administração do Windows Server 2003

Desenvolvimento de Grandes Aplicações Web

INSTALAÇÃO-ATUALIZAÇÃO SANKHYAW WINDOWS ORACLE

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

Sumário. Capítulo 1 Revisão de PHP Capítulo 2 Melhorando o processamento de formulários... 46

JavaScript. de Alto Desempenho. Nicholas C. Zakas. Novatec

Sistemas Operacionais

Departamento de Tecnologia da Informação DTI Coordenadoria de Relacionamento com o Cliente CRC. Treinamento Básico do Correio Eletrônico

IPTABLES. Helder Nunes

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento

Mostrar área de trabalho.scf. Manual do Produto EDI.

Empresa. Dave Gray. Novatec. com Thomas Vander Wal

CONTEÚDOS PROGRAMÁTICOS DA ACADEMIA

Processo de Envio de

FullCopyConvert Data

Transcrição:

Python Cookbook David Beazley Brian K. Jones Novatec

Authorized Portuguese translation of the English edition of titled Python Cookbook, 3rd Edition, ISBN 978-1-449-34037-7 2013, David Beazley and Brian K. Jones. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês do título Python Cookbook, 3rd Edition, ISBN 978-1-449-34037-7 2013, David Beazley e Brian K. Jones. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. Novatec Editora Ltda. 2013. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão técnica: Aurelio Jargas Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-332-1 Histórico de impressões: Novembro/2013 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec

Sumário Prefácio...13 Capítulo 1 Estruturas de dados e algoritmos...18 1.1. Desempacotar uma sequência em variáveis separadas...18 1.2. Desempacotar elementos de iteráveis de tamanho arbitrário... 20 1.3. Manter os últimos N itens... 23 1.4. Encontrar os N itens maiores ou menores... 25 1.5. Implementar uma fila de prioridades... 26 1.6. Mapear chaves a múltiplos valores em um dicionário... 29 1.7. Manter dicionários em ordem... 30 1.8. Fazer cálculos com dicionários... 32 1.9. Encontrar itens comuns em dois dicionários... 34 1.10. Remover itens duplicados de uma sequência, preservando a ordem... 35 1.11. Dar nome a uma fatia (slice)... 37 1.12 Determinar os itens que ocorrem mais frequentemente em uma sequência... 38 1.13. Ordenar uma lista de dicionários por meio de uma chave comum... 40 1.14. Ordenar objetos sem suporte nativo para comparação... 42 1.15. Agrupar registros de acordo com um campo... 43 1.16. Filtrar elementos de uma sequência... 45 1.17. Extrair um subconjunto de um dicionário... 48 1.18. Mapear nomes a elementos de sequência... 49 1.19. Transformar e reduzir dados ao mesmo tempo...51 1.20. Combinar múltiplos mapeamentos em um único mapeamento... 53 Capítulo 2 Strings e textos...56 2.1. Separar strings de acordo com vários delimitadores... 56 2.2. Fazer correspondência de texto no início ou no fim de uma string... 57 2.3. Fazer correspondência de strings utilizando padrões de curinga do shell... 59 2.4. Fazer correspondência e pesquisa de padrões de texto...61 2.5. Pesquisar e substituir textos... 65 2.6. Pesquisar e substituir textos sem diferenciar letras minúsculas de maiúsculas... 66 2.7. Especificar uma expressão regular para obter a correspondência mais curta possível.67 2.8. Escrever uma expressão regular para padrões multilinha... 68 5

6 Python Cookbook 2.9. Normalizar texto Unicode para gerar uma representação padrão... 70 2.10. Trabalhar com caracteres Unicode em expressões regulares... 72 2.11. Remover caracteres indesejados de strings... 73 2.12. Sanitizar e limpar textos... 75 2.13. Alinhar strings de texto... 77 2.14. Combinar e concatenar strings... 79 2.15. Interpolar variáveis em strings... 82 2.16. Reformatar texto para gerar um número fixo de colunas... 85 2.17. Manipular entidades HTML e XML em textos... 86 2.18. Extrair tokens de textos... 88 2.19. Escrever um parser descendente recursivo simples...91 2.20. Executar operações de texto em strings de bytes...100 Capítulo 3 Números, datas e horas...104 3.1. Arredondar valores numéricos...104 3.2. Realizar cálculos decimais precisos... 106 3.3. Formatar números para saída...108 3.4. Trabalhar com inteiros binários, octais e hexadecimais... 110 3.5. Empacotar e desempacotar inteiros grandes a partir de bytes... 112 3.6. Executar operações matemáticas com números complexos... 114 3.7. Trabalhar com infinito e NaNs... 116 3.8. Fazer cálculos com frações... 118 3.9. Fazer cálculos com arrays numéricos grandes... 119 3.10. Executar cálculos algébricos matriciais e lineares...123 3.11. Selecionar itens aleatoriamente...125 3.12. Converter dias para segundos e outras conversões básicas relacionadas com tempo.127 3.13. Determinar o dia da última sexta-feira...129 3.14. Encontrar o intervalo de datas do mês corrente... 131 3.15. Converter strings em datetimes...133 3.16. Manipular datas que envolvem fuso horário...134 Capítulo 4 Iteradores e geradores...137 4.1. Consumir manualmente um iterador...137 4.2. Delegar iterações...138 4.3. Criar novos padrões de iteração com geradores...139 4.4. Implementar o protocolo do iterador... 141 4.5. Iterar ao contrário...144 4.6. Definir funções geradoras com estado extra...145 4.7. Obter uma fatia de um iterador...146 4.8. Descartar a primeira parte de um iterável...148 4.9. Iterar por todas as combinações ou permutações possíveis...150 4.10. Iterar pelos pares índice-valor de uma sequência...152

Sumário 7 4.11. Iterar por várias sequências simultaneamente...154 4.12. Iterar pelos itens em contêineres separados...156 4.13. Criar pipelines para processamento de dados...158 4.14. Linearizar uma sequência aninhada... 161 4.15. Iterar de modo ordenado por iteráveis ordenados e combinados...162 4.16. Substituir laços while infinitos por um iterador...164 Capítulo 5 Arquivos e I/O...166 5.1. Ler e escrever dados de texto... 166 5.2. Enviar dados de saída para um arquivo...169 5.3. Apresentar dados com um separador ou com um final de linha diferente...169 5.4. Ler e escrever dados binários... 171 5.5 Escrever em um arquivo que ainda não existe...173 5.6 Realizar operações de I/O em uma string... 174 5.7 Ler e escrever em arquivos de dados compactados... 175 5.8 Iterar por registros de tamanho fixo...177 5.9 Ler dados binários em um buffer mutável...177 5.10 Mapear arquivos binários em memória...179 5.11 Manipular nomes de caminho...182 5.12 Verificar se um arquivo existe...183 5.13 Obter uma listagem de diretório...185 5.14 Ignorar a codificação de nomes de arquivo...186 5.15 Apresentar nomes indevidos de arquivo...188 5.16 Adicionar ou alterar a codificação de um arquivo aberto...190 5.17 Escrever bytes em um arquivo texto...192 5.18 Encapsular um descritor de arquivo como um objeto arquivo...193 5.19 Criar arquivos e diretórios temporários...195 5.20 Comunicar-se usando portas seriais...198 5.21 Serializar objetos Python...199 Capítulo 6 Codificação e processamento de dados...203 6.1. Ler e escrever dados CSV... 203 6.2. Ler e escrever dados JSON... 207 6.3 Fazer parse de dados XML simples... 212 6.4 Efetuar parse de arquivos XML enormes de modo incremental...215 6.5 Transformar um dicionário em XML... 218 6.6 Fazer parse, modificar e reescrever XML... 221 6.7 Fazer parse de documentos XML com namespaces...223 6.8 Interagir com um banco de dados relacional...225 6.9 Decodificar e codificar dígitos hexadecimais... 227 6.10 Decodificar e codificar Base64... 229

8 Python Cookbook 6.11 Ler e escrever arrays de estruturas binárias... 230 6.12 Ler estruturas binárias aninhadas e de tamanhos variáveis...234 6.13 Sintetizar dados e realizar cálculos estatísticos...245 Capítulo 7 Funções...249 7.1 Criar funções que aceitem qualquer quantidade de argumentos...249 7.2 Criar funções que aceitem somente argumentos nomeados... 250 7.3 Associar metadados informativos aos argumentos de uma função...252 7.4 Retornar múltiplos valores de uma função...253 7.5 Definir funções com argumentos default... 254 7.6 Definir funções anônimas ou inline...257 7.7 Capturar variáveis em funções anônimas... 258 7.8 Fazer um callable de n argumentos funcionar como um callable com menos argumentos.260 7.9 Substituir classes com um único método por funções... 263 7.10 Levar um estado extra às funções de callback... 264 7.11 Definir funções de callback inline... 268 7.12 Acessar variáveis definidas em uma closure... 271 Capítulo 8 Classes e objetos...275 8.1 Alterar a representação em string de instâncias...275 8.2 Personalizar a formatação de strings... 277 8.3 Fazer os objetos suportarem o protocolo de gerenciamento de contexto...278 8.4 Economizar memória ao criar uma grande quantidade de instâncias...281 8.5 Encapsular nomes em uma classe... 282 8.6 Criar atributos gerenciados... 284 8.7 Chamar um método da classe pai... 288 8.8 Estender uma propriedade em uma subclasse... 293 8.9 Criar um novo tipo de atributo de classe ou de instância... 297 8.10 Usar propriedades processadas em modo lazy... 301 8.11 Simplificar a inicialização de estruturas de dados... 304 8.12 Definir uma interface ou uma classe base abstrata... 308 8.13 Implementar um modelo de dados ou um sistema de tipos...311 8.14 Implementar contêineres personalizados... 318 8.15 Delegar acesso a atributos...322 8.16 Definir mais de um construtor em uma classe...326 8.17 Criar uma instância sem chamar init...328 8.18 Estender classes com mixins...330 8.19 Implementar objetos stateful ou máquinas de estado...335 8.20 Chamar um método em um objeto especificando o nome como uma string... 341 8.21 Implementar o padrão Visitor... 343 8.22 Implementar o padrão Visitor sem recursão...347 8.23 Gerenciar memória em estruturas de dados cíclicas...354

Sumário 9 8.24 Fazer as classes suportarem operações de comparação...358 8.25 Cria instâncias em cache... 360 Capítulo 9 Metaprogramação...365 9.1 Colocar um wrapper em torno de uma função... 365 9.2 Preservar metadados de funções ao criar decoradores...367 9.3 Desfazer o encapsulamento de um decorador... 369 9.4 Definir um decorador que aceite argumentos... 371 9.5 Definir um decorador com atributos ajustáveis pelo usuário...372 9.6 Definir um decorador que aceite um argumento opcional...376 9.7 Impor uma verificação de tipos em uma função por meio de um decorador...378 9.8 Definir decoradores como parte de uma classe... 382 9.9 Definir decoradores como classes... 384 9.10 Aplicar decoradores a métodos de classe e estáticos... 387 9.11 Criar decoradores que adicionam argumentos a funções encapsuladas... 389 9.12 Usar decoradores para modificar definições de classe...392 9.13 Utilizar uma metaclasse para controlar a criação de instâncias...394 9.14 Capturar a ordem de definição de atributos de classe...397 9.15 Definir uma metaclasse que aceite argumentos opcionais... 400 9.16 Impor uma assinatura de argumentos em *args e **kwargs... 402 9.17 Impor convenções de codificação em classes... 406 9.18 Definir classes por meio do próprio programa... 409 9.19 Inicializar membros de classe no momento da definição... 413 9.20 Implementar múltiplos despachos com anotações de função...415 9.21 Evitar métodos repetitivos de propriedades... 421 9.22 Definir gerenciadores de contexto da maneira fácil...423 9.23 Executar código com efeitos colaterais locais...425 9.24 Fazer parse e análise de código-fonte em Python... 428 9.25 Fazer o disassembly de bytecodes de Python...433 Capítulo 10 Módulos e pacotes...437 10.1 Criar um pacote hierárquico de módulos...437 10.2 Controlar a importação de tudo... 438 10.3 Importar submódulos de pacote usando nomes relativos...439 10.4 Separar um módulo em vários arquivos...441 10.5 Fazer diretórios separados de código serem importados com um namespace comum.. 444 10.6 Recarregar módulos... 446 10.7 Tornar um diretório ou um arquivo zip executável como um script principal... 448 10.8 Ler arquivos de dados que estão em um pacote... 449 10.9 Adicionar diretórios a sys.path... 450 10.10 Importar módulos usando um nome especificado em uma string...452 10.11 Carregar módulos de um computador remoto usando hooks na importação...453

10 Python Cookbook 10.12 Inserir patches em módulos na importação...470 10.13 Instalar pacotes somente para você mesmo...473 10.14 Criar um novo ambiente Python... 474 10.15 Distribuir pacotes...476 Capítulo 11 Redes e programação web...478 11.1 Interagir com serviços HTTP como um cliente...478 11.2 Criar um servidor TCP... 482 11.3 Criar um servidor UDP... 486 11.4 Gerar um intervalo de endereços IP a partir de um endereço CIDR... 488 11.5 Criar uma interface simples baseada em REST... 490 11.6 Implementar uma chamada de procedimento remoto simples usando XML-RPC.. 495 11.7 Efetuar comunicação somente entre interpretadores... 498 11.8 Implementar chamadas de procedimentos remotos... 500 11.9 Autenticar clientes facilmente... 504 11.10 Adicionar SSL a serviços de rede... 506 11.11 Passar um descritor de arquivo socket entre processos... 513 11.12 Entender como funciona o I/O orientado a eventos... 518 11.13 Enviar e receber arrays extensos...524 Capítulo 12 Concorrência...527 12.1 Iniciar e terminar threads...527 12.2 Determinar se uma thread foi iniciada...530 12.3 Efetuar comunicação entre threads...534 12.4 Travar seções críticas... 540 12.5 Utilizar lock evitando deadlocks... 543 12.6 Armazenar estados específicos de threads...547 12.7 Criar um pool de threads... 549 12.8 Realizar programação paralela simples...553 12.9 Lidar com o GIL (e como parar de se preocupar com ele)...557 12.10 Definir uma tarefa do tipo ator...561 12.11 Implementar troca de mensagens usando o padrão publish/subscribe... 565 12.12 Usar geradores como alternativa às threads... 569 12.13 Fazer polling em várias filas de threads... 577 12.14 Disparar um processo daemon no Unix... 580 Capítulo 13 Criação de scripts utilitários e administração de sistemas...585 13.1 Aceitar entrada em scripts por meio de redirecionamento, pipes ou arquivos de entrada.. 585 13.2 Terminar um programa com uma mensagem de erro... 586 13.3 Efetuar parse de opções da linha de comando... 587 13.4 Solicitar uma senha em tempo de execução... 590

Sumário 11 13.5 Obter o tamanho do terminal... 591 13.6 Executar um comando externo e obter sua saída...592 13.7 Copiar ou mover arquivos e diretórios...594 13.8 Criar e descompactar arquivos... 596 13.9 Localizar arquivos pelo nome...597 13.10 Ler arquivos de configuração... 598 13.11 Adicionar logging em scripts simples... 602 13.12 Adicionar logging em bibliotecas... 605 13.13 Criar um cronômetro... 606 13.14 Estabelecer limites quanto ao uso de memória e de CPU... 609 13.15 Iniciar um navegador web...610 Capítulo 14 Testes, depuração e exceções...612 14.1 Testar saída enviada ao stdout... 612 14.2 Modificar objetos em testes de unidade... 613 14.3 Testar condições excepcionais em testes de unidade... 617 14.4 Fazer log do resultado do teste em um arquivo... 619 14.5 Ignorar ou antecipar falhas em testes... 620 14.6 Lidar com várias exceções...622 14.7 Capturar todas as exceções...624 14.8 Criar exceções personalizadas...625 14.9 Gerar uma exceção em resposta a outra exceção...627 14.10 Gerar novamente a última exceção... 630 14.11 Gerar mensagens de aviso (warnings)... 631 14.12 Depurar falhas básicas de programas...633 14.13 Gerar um perfil e medir tempos em seu programa...635 14.14 Fazer seus programas executarem mais rapidamente... 638 Capítulo 15 Extensões C...644 15.1 Acessar código C usando ctypes... 646 15.2 Criar um módulo simples de extensão C...652 15.3 Criar uma função de extensão que opere em arrays...657 15.4 Administrar ponteiros opacos em módulos de extensão C... 660 15.5 Definir e exportar APIs C a partir de módulos de extensão... 662 15.6 Chamar o Python a partir do C... 667 15.7 Liberar o GIL em extensões C...673 15.8 Combinar threads de C e de Python...674 15.9 Encapsular código C com Swig...675 15.10 Encapsular código C existente com Cython...681 15.11 Usar Cython para implementar operações de alto desempenho em arrays... 688 15.12 Transformar um ponteiro de função em um callable...693 15.13 Passar strings terminadas com NULL para bibliotecas C... 694

12 Python Cookbook 15.14 Passar strings Unicode para bibliotecas C... 699 15.15 Converter strings C para Python... 704 15.16 Trabalhar com strings C com codificação duvidosa... 705 15.17 Passar nomes de arquivo a extensões C... 708 15.18 Passar arquivos abertos para extensões C...710 15.19 Ler objetos do tipo arquivo a partir do C...711 15.20 Consumir um iterável a partir do C... 714 15.21 Diagnosticar falha de segmentação...715 Apêndice A Leituras complementares...717 Recursos online... 717 Livros para aprender sobre Python... 718 Livros mais avançados... 718