Sei sulla pagina 1di 10

Python Cookbook

David Beazley
Brian K. Jones

Novatec

Authorized Portuguese translation of the English edition of titled Python Cookbook, 3rd Edition, ISBN 978-1-44934037-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.
Traduo em portugus autorizada da edio em ingls do ttulo Python Cookbook, 3rd Edition, ISBN 978-1-44934037-7 2013, David Beazley e Brian K. Jones. Esta traduo publicada e vendida com a permisso da O'Reilly
Media, Inc., detentora de todos os direitos para publicao e venda desta obra.
Novatec Editora Ltda. 2013.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998.
proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito,
do autor e da Editora.
Editor: Rubens Prates
Traduo: Lcia A. Kinoshita
Reviso tcnica: Aurelio Jargas
Reviso gramatical: Marta Almeida de S
Editorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-332-1
Histrico de impresses:
Novembro/2013

Primeira edio

Novatec Editora Ltda.


Rua Lus Antnio dos Santos 110
02460-000 So 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

Sumrio

Prefcio.............................................................................................................................................13
Captulo 1 Estruturas de dados e algoritmos.....................................................................................18
1.1. Desempacotar uma sequncia em variveis separadas...............................................18
1.2. Desempacotar elementos de iterveis de tamanho arbitrrio.................................... 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 mltiplos valores em um dicionrio............................................... 29
1.7. Manter dicionrios em ordem................................................................................. 30
1.8. Fazer clculos com dicionrios............................................................................... 32
1.9. Encontrar itens comuns em dois dicionrios........................................................... 34
1.10. Remover itens duplicados de uma sequncia, preservando a ordem........................ 35
1.11. Dar nome a uma fatia (slice).................................................................................. 37
1.12 Determinar os itens que ocorrem mais frequentemente em uma sequncia.............. 38
1.13. Ordenar uma lista de dicionrios por meio de uma chave comum.......................... 40
1.14. Ordenar objetos sem suporte nativo para comparao............................................ 42
1.15. Agrupar registros de acordo com um campo.......................................................... 43
1.16. Filtrar elementos de uma sequncia....................................................................... 45
1.17. Extrair um subconjunto de um dicionrio............................................................. 48
1.18. Mapear nomes a elementos de sequncia............................................................... 49
1.19. Transformar e reduzir dados ao mesmo tempo........................................................51
1.20. Combinar mltiplos mapeamentos em um nico mapeamento.............................. 53

Captulo 2 Strings e textos...............................................................................................................56


2.1. Separar strings de acordo com vrios delimitadores................................................. 56
2.2. Fazer correspondncia de texto no incio ou no fim de uma string........................... 57
2.3. Fazer correspondncia de strings utilizando padres de curinga do shell.................. 59
2.4. Fazer correspondncia e pesquisa de padres de texto..............................................61
2.5. Pesquisar e substituir textos................................................................................... 65
2.6. Pesquisar e substituir textos sem diferenciar letras minsculas de maisculas.......... 66
2.7. Especificar uma expresso regular para obter a correspondncia mais curta possvel. 67
2.8. Escrever uma expresso regular para padres multilinha......................................... 68
5

Python Cookbook

2.9. Normalizar texto Unicode para gerar uma representao padro.............................. 70


2.10. Trabalhar com caracteres Unicode em expresses 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 variveis em strings............................................................................... 82
2.16. Reformatar texto para gerar um nmero 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 operaes de texto em strings de bytes...................................................100

Captulo 3 Nmeros, datas e horas.................................................................................................104


3.1. Arredondar valores numricos...............................................................................104
3.2. Realizar clculos decimais precisos....................................................................... 106
3.3. Formatar nmeros para sada................................................................................108
3.4. Trabalhar com inteiros binrios, octais e hexadecimais........................................... 110
3.5. Empacotar e desempacotar inteiros grandes a partir de bytes.................................. 112
3.6. Executar operaes matemticas com nmeros complexos..................................... 114
3.7. Trabalhar com infinito e NaNs............................................................................... 116
3.8. Fazer clculos com fraes.................................................................................... 118
3.9. Fazer clculos com arrays numricos grandes......................................................... 119
3.10. Executar clculos algbricos matriciais e lineares..................................................123
3.11. Selecionar itens aleatoriamente.............................................................................125
3.12. Converter dias para segundos e outras converses bsicas relacionadas com tempo.127
3.13. Determinar o dia da ltima sexta-feira..................................................................129
3.14. Encontrar o intervalo de datas do ms corrente..................................................... 131
3.15. Converter strings em datetimes............................................................................133
3.16. Manipular datas que envolvem fuso horrio.........................................................134

Captulo 4 Iteradores e geradores..................................................................................................137


4.1. Consumir manualmente um iterador..................................................................... 137
4.2. Delegar iteraes..................................................................................................138
4.3. Criar novos padres de iterao com geradores......................................................139
4.4. Implementar o protocolo do iterador..................................................................... 141
4.5. Iterar ao contrrio.................................................................................................144
4.6. Definir funes geradoras com estado extra........................................................... 145
4.7. Obter uma fatia de um iterador.............................................................................146
4.8. Descartar a primeira parte de um itervel..............................................................148
4.9. Iterar por todas as combinaes ou permutaes possveis......................................150
4.10. Iterar pelos pares ndice-valor de uma sequncia...................................................152

Sumrio

4.11. Iterar por vrias sequncias simultaneamente.......................................................154


4.12. Iterar pelos itens em contineres separados...........................................................156
4.13. Criar pipelines para processamento de dados.......................................................158
4.14. Linearizar uma sequncia aninhada..................................................................... 161
4.15. Iterar de modo ordenado por iterveis ordenados e combinados............................162
4.16. Substituir laos while infinitos por um iterador....................................................164

Captulo 5 Arquivos e I/O...............................................................................................................166


5.1. Ler e escrever dados de texto................................................................................. 166
5.2. Enviar dados de sada 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 binrios................................................................................. 171
5.5 Escrever em um arquivo que ainda no existe.........................................................173
5.6 Realizar operaes 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 binrios em um buffer mutvel..............................................................177
5.10 Mapear arquivos binrios em memria.................................................................179
5.11 Manipular nomes de caminho...............................................................................182
5.12 Verificar se um arquivo existe...............................................................................183
5.13 Obter uma listagem de diretrio...........................................................................185
5.14 Ignorar a codificao de nomes de arquivo............................................................186
5.15 Apresentar nomes indevidos de arquivo................................................................188
5.16 Adicionar ou alterar a codificao 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 diretrios temporrios.................................................................195
5.20 Comunicar-se usando portas seriais.....................................................................198
5.21 Serializar objetos Python......................................................................................199

Captulo 6 Codificao 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 dicionrio 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 dgitos hexadecimais.......................................................... 227
6.10 Decodificar e codificar Base64............................................................................. 229

Python Cookbook

6.11 Ler e escrever arrays de estruturas binrias........................................................... 230


6.12 Ler estruturas binrias aninhadas e de tamanhos variveis....................................234
6.13 Sintetizar dados e realizar clculos estatsticos.......................................................245

Captulo 7 Funes........................................................................................................................249
7.1 Criar funes que aceitem qualquer quantidade de argumentos...............................249
7.2 Criar funes que aceitem somente argumentos nomeados.................................... 250
7.3 Associar metadados informativos aos argumentos de uma funo...........................252
7.4 Retornar mltiplos valores de uma funo..............................................................253
7.5 Definir funes com argumentos default............................................................... 254
7.6 Definir funes annimas ou inline.......................................................................257
7.7 Capturar variveis em funes annimas............................................................... 258
7.8 Fazer um callable de n argumentos funcionar como um callable com menos argumentos.260
7.9 Substituir classes com um nico mtodo por funes............................................ 263
7.10 Levar um estado extra s funes de callback....................................................... 264
7.11 Definir funes de callback inline........................................................................ 268
7.12 Acessar variveis definidas em uma closure........................................................... 271

Captulo 8 Classes e objetos...........................................................................................................275


8.1 Alterar a representao em string de instncias.......................................................275
8.2 Personalizar a formatao de strings..................................................................... 277
8.3 Fazer os objetos suportarem o protocolo de gerenciamento de contexto...................278
8.4 Economizar memria ao criar uma grande quantidade de instncias.......................281
8.5 Encapsular nomes em uma classe......................................................................... 282
8.6 Criar atributos gerenciados................................................................................... 284
8.7 Chamar um mtodo 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 instncia....................................... 297
8.10 Usar propriedades processadas em modo lazy....................................................... 301
8.11 Simplificar a inicializao 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 contineres personalizados............................................................... 318
8.15 Delegar acesso a atributos....................................................................................322
8.16 Definir mais de um construtor em uma classe.......................................................326
8.17 Criar uma instncia sem chamar init....................................................................328
8.18 Estender classes com mixins.................................................................................330
8.19 Implementar objetos stateful ou mquinas de estado............................................335
8.20 Chamar um mtodo em um objeto especificando o nome como uma string.......... 341
8.21 Implementar o padro Visitor.............................................................................. 343
8.22 Implementar o padro Visitor sem recurso..........................................................347
8.23 Gerenciar memria em estruturas de dados cclicas..............................................354

Sumrio

8.24 Fazer as classes suportarem operaes de comparao..........................................358


8.25 Cria instncias em cache..................................................................................... 360

Captulo 9 Metaprogramao........................................................................................................365
9.1 Colocar um wrapper em torno de uma funo....................................................... 365
9.2 Preservar metadados de funes 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 ajustveis pelo usurio...................................372
9.6 Definir um decorador que aceite um argumento opcional.......................................376
9.7 Impor uma verificao de tipos em uma funo 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 mtodos de classe e estticos.............................................. 387
9.11 Criar decoradores que adicionam argumentos a funes encapsuladas................... 389
9.12 Usar decoradores para modificar definies de classe.............................................392
9.13 Utilizar uma metaclasse para controlar a criao de instncias...............................394
9.14 Capturar a ordem de definio 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 convenes de codificao em classes......................................................... 406
9.18 Definir classes por meio do prprio programa...................................................... 409
9.19 Inicializar membros de classe no momento da definio........................................ 413
9.20 Implementar mltiplos despachos com anotaes de funo.................................415
9.21 Evitar mtodos repetitivos de propriedades........................................................... 421
9.22 Definir gerenciadores de contexto da maneira fcil................................................423
9.23 Executar cdigo com efeitos colaterais locais.........................................................425
9.24 Fazer parse e anlise de cdigo-fonte em Python.................................................. 428
9.25 Fazer o disassembly de bytecodes de Python.........................................................433

Captulo 10 Mdulos e pacotes.......................................................................................................437


10.1 Criar um pacote hierrquico de mdulos..............................................................437
10.2 Controlar a importao de tudo.......................................................................... 438
10.3 Importar submdulos de pacote usando nomes relativos.......................................439
10.4 Separar um mdulo em vrios arquivos................................................................441
10.5 Fazer diretrios separados de cdigo serem importados com um namespace comum.. 444
10.6 Recarregar mdulos............................................................................................ 446
10.7 Tornar um diretrio ou um arquivo zip executvel como um script principal......... 448
10.8 Ler arquivos de dados que esto em um pacote.................................................... 449
10.9 Adicionar diretrios a sys.path............................................................................ 450
10.10 Importar mdulos usando um nome especificado em uma string.........................452
10.11 Carregar mdulos de um computador remoto usando hooks na importao.........453

10

Python Cookbook

10.12 Inserir patches em mdulos na importao.........................................................470


10.13 Instalar pacotes somente para voc mesmo..........................................................473
10.14 Criar um novo ambiente Python......................................................................... 474
10.15 Distribuir pacotes...............................................................................................476

Captulo 11 Redes e programao web...........................................................................................478


11.1 Interagir com servios 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 endereos IP a partir de um endereo 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 comunicao somente entre interpretadores............................................. 498
11.8 Implementar chamadas de procedimentos remotos.............................................. 500
11.9 Autenticar clientes facilmente............................................................................... 504
11.10 Adicionar SSL a servios 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

Captulo 12 Concorrncia...............................................................................................................527
12.1 Iniciar e terminar threads......................................................................................527
12.2 Determinar se uma thread foi iniciada..................................................................530
12.3 Efetuar comunicao entre threads.......................................................................534
12.4 Travar sees crticas........................................................................................... 540
12.5 Utilizar lock evitando deadlocks.......................................................................... 543
12.6 Armazenar estados especficos de threads.............................................................547
12.7 Criar um pool de threads.................................................................................... 549
12.8 Realizar programao 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 padro publish/subscribe.................. 565
12.12 Usar geradores como alternativa s threads......................................................... 569
12.13 Fazer polling em vrias filas de threads............................................................... 577
12.14 Disparar um processo daemon no Unix.............................................................. 580

Captulo 13 Criao de scripts utilitrios e administrao 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 opes da linha de comando...................................................... 587
13.4 Solicitar uma senha em tempo de execuo.......................................................... 590

Sumrio

11

13.5 Obter o tamanho do terminal............................................................................... 591


13.6 Executar um comando externo e obter sua sada...................................................592
13.7 Copiar ou mover arquivos e diretrios..................................................................594
13.8 Criar e descompactar arquivos............................................................................ 596
13.9 Localizar arquivos pelo nome...............................................................................597
13.10 Ler arquivos de configurao............................................................................. 598
13.11 Adicionar logging em scripts simples.................................................................. 602
13.12 Adicionar logging em bibliotecas........................................................................ 605
13.13 Criar um cronmetro......................................................................................... 606
13.14 Estabelecer limites quanto ao uso de memria e de CPU..................................... 609
13.15 Iniciar um navegador web...................................................................................610

Captulo 14 Testes, depurao e excees.......................................................................................612


14.1 Testar sada enviada ao stdout............................................................................... 612
14.2 Modificar objetos em testes de unidade................................................................ 613
14.3 Testar condies 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 vrias excees....................................................................................622
14.7 Capturar todas as excees...................................................................................624
14.8 Criar excees personalizadas..............................................................................625
14.9 Gerar uma exceo em resposta a outra exceo....................................................627
14.10 Gerar novamente a ltima exceo..................................................................... 630
14.11 Gerar mensagens de aviso (warnings).................................................................. 631
14.12 Depurar falhas bsicas de programas...................................................................633
14.13 Gerar um perfil e medir tempos em seu programa...............................................635
14.14 Fazer seus programas executarem mais rapidamente........................................... 638

Captulo 15 Extenses C.................................................................................................................644


15.1 Acessar cdigo C usando ctypes........................................................................... 646
15.2 Criar um mdulo simples de extenso C..............................................................652
15.3 Criar uma funo de extenso que opere em arrays...............................................657
15.4 Administrar ponteiros opacos em mdulos de extenso C.................................... 660
15.5 Definir e exportar APIs C a partir de mdulos de extenso................................... 662
15.6 Chamar o Python a partir do C........................................................................... 667
15.7 Liberar o GIL em extenses C...............................................................................673
15.8 Combinar threads de C e de Python..................................................................... 674
15.9 Encapsular cdigo C com Swig.............................................................................675
15.10 Encapsular cdigo C existente com Cython.........................................................681
15.11 Usar Cython para implementar operaes de alto desempenho em arrays............ 688
15.12 Transformar um ponteiro de funo 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 codificao duvidosa............................................. 705
15.17 Passar nomes de arquivo a extenses C............................................................... 708
15.18 Passar arquivos abertos para extenses C.............................................................710
15.19 Ler objetos do tipo arquivo a partir do C..............................................................711
15.20 Consumir um itervel a partir do C.................................................................... 714
15.21 Diagnosticar falha de segmentao......................................................................715

Apndice A Leituras complementares............................................................................................717


Recursos online.......................................................................................................... 717
Livros para aprender sobre Python.............................................................................. 718
Livros mais avanados................................................................................................ 718

Potrebbero piacerti anche