Arquivos Zip com Python - Aula PyCursos

marcelcaraciolo 4,244 views 21 slides Jun 02, 2012
Slide 1
Slide 1 of 21
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21

About This Presentation

Aula sobre ZipFiles com Python pelo PyCursos.
Instrutor: Marcel Pinheiro Caraciolo


Slide Content

1!
Criando e Abrindo Arquivos ZIP!
Marcel Pinheiro Caraciolo!
Python'Aula'Extra'

2!
Conhecendo o zipfile!
'
'
Python' tem' suporte' para' abertura' e' escrita' de' arquivos' ZIP.'
Através'do'módulo'zipfile'é'possível'comprimir,'adicionar,'ler','
escrever'e'até'importar'módulos'a'par@r'de'um'arquivo'ZIP.'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile('example.zip',''r’)'
hKp://docs.python.org/library/zipfile.html'

3!
Conhecendo o zipfile!
'
'
Python' tem' suporte' para' abertura' e' escrita' de' arquivos' ZIP.'
Através'do'módulo'zipfile'é'possível'comprimir,'adicionar,'ler','
escrever'e'até'importar'módulos'a'par@r'de'um'arquivo'ZIP.'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile('example.zip',''r’)'
Simples(não(?!(
hKp://docs.python.org/library/zipfile.html'

4!
Abrir Arquivos Zip!'
'
Sempre'importante'verificarmos'se'o'arquivo'corrente'desejado'se'
refere'ou'não'a'um'arquivo'ZIP'válido.''
'
A'função'para'este'caso'é'o'is_zipfile(‘filename’).'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zipfile.is_zipfile(“README.txt”)'
False'
>>>zipfile.is_zipfile(“example.zip”)'
True'
'
'
'
(O((que(ele(verifica(não(é(apenas(se(tem(a(terminação(.zip(e(sim(se((
referencia(a(uma(estrutura(válida(de(arquivo(comprimido.(

5!
Abrir Arquivos Zip!
'
'
Para'ler'quais'os'nomes'de'arquivos'existentes'em'um'arquivo'zip,'
use'a'função'namelist():'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘r’)'
>>>'print'zf.namelist()'
[“README.txt”]'

6!
Abrir Arquivos Zip!'
'
Ele'pode'acessar'todos'os'meta^dados'de'um'arquivo'Zip,'por'
meio'das'funções'infolist()'ou'ge0nfo().'
'
Python'Aula'Extra'
import'date@me'
import'zipfile'
'
def2print_info(archive_name):2
''''zf'='zipfile.ZipFile(archive_name)'
''''for'info'in'zf.infolist():'
''''''''print'info.filename'
''''''''print''\tComment:\t','info.comment'
''''''''print''\tModified:\t','[email protected]@me(*info.date_@me)'
''''''''print''\tSystem:\t\t','info.create_system,''(0'='Windows,'3'='Unix)''
''''''''print''\tZIP'version:\t','info.create_version'
''''''''print''\tCompressed:\t','info.compress_size,''bytes''
''''''''print''\tUncompressed:\t','info.file_size,''bytes''
''''''''print'

7!
Abrir Arquivos Zip!'
'
Ele'pode'acessar'todos'os'meta^dados'de'um'arquivo'Zip,'por'
meio'das'funções'infolist()'ou'ge0nfo().'
'
Python'Aula'Extra'
$'python'zipfile_infolist.py'
'
README.txt(
((((((((Comment:(
((((((((Modified:(((((((2007I12I16(10:08:52(
((((((((System:(((((((((3((0(=(Windows,(3(=(Unix)(
((((((((ZIP(version:((((23(
((((((((Compressed:(((((63(bytes(
((((((((Uncompressed:(((75(bytes(

8!
Abrir Arquivos Zip!'
'
Ele'pode'acessar'todos'os'meta^dados'de'um'arquivo'Zip,'por'
meio'das'funções'infolist()'ou'ge0nfo().'
'
Python'Aula'Extra'
import'date@me'
import'zipfile'
'
def2print_info(archive_name):2
''''zf'='zipfile.ZipFile(archive_name)'
2222for2info2in2zf.infolist():2
''''''''print'info.filename'
''''''''print''\tComment:\t','info.comment'
''''''''print''\tModified:\t','[email protected]@me(*info.date_@me)'
''''''''print''\tSystem:\t\t','info.create_system,''(0'='Windows,'3'='Unix)''
''''''''print''\tZIP'version:\t','info.create_version'
''''''''print''\tCompressed:\t','info.compress_size,''bytes''
''''''''print''\tUncompressed:\t','info.file_size,''bytes''
''''''''print'
Existem(outras(informações(que(
podem(ser(ob\das(além(das(
apresentadas.(Recomendo(a(
leitura(das(especificações(
PKZIP(Applica\on(Note.(

9!
Abrir Arquivos Zip!
'
'
Usando'o'ge0nfo()'no'caso'quando'você'já'sabe'o'nome'do'
arquivo.'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘r’)'
>>>'info'='z.ge@nfo(“README.txt”)'
>>>'info.filename,'info.file_size'
README.txt''75'

10!
Abrir Arquivos Zip!
'
'
Usando'o'ge0nfo()'no'caso'quando'você'já'sabe'o'nome'do'
arquivo.'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘r’)'
>>>'info'='z.ge0nfo(“README.txt”)'
>>>'info.filename,'info.file_size'
README.txt''75'
Se( o(arquivo(não(for(
encontrado(o(ge#nfo()(
retorna(uma(exceção(do(\po(
KeyError.(

11!
Extraindo arquivos de um Zip!
'
'
Para'acessar'o'conteúdo'do'arquivo,'basta'u@lizar'o'método'read()'
passando'como'parâmetro'o'nome'do'arquivo.'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘r’)'
>>>'data'='z.read(“README.txt”)'
>>>'repr(data)'
'The'examples'for'the'zipfile'module'use'this'file'and'example.zip'as'data.\n''
'
'
'
(Lembrando(que(o(conteúdo(lido(é(no(formato(de(string,((logo(se(for(
arquivos(binários,(ele(retornará(uma(string(de(bytes!(

12!
Extraindo arquivos de um Zip!
'
'
Podemos'chamar'diretamente'também'o'extractall()'que'extrai'
todos'os'arquivos'para'um'diretório'especificado.'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘r’)'
>>>'zf.extractall()'
>>>'f'='open(‘README.txt’)'
>>>'f.read()'
'The'examples'for'the'zipfile'module'use'this'file'and'example.zip'as'data.\n''
'
'
'
Você(pode(inclusive(alterar(o(caminho(pela(variável(path(e(tambem(
definir(quais(serao(os(arquivos(extraidos(pela(variavel(lista(members.(

13!
Criando novos arquivos Zip!
'
'
Para'criar'um'novo'arquivo,'basta'instanciar'ZipFile'no'modo'
escrita.'Para'adicionar'arquivos,'use'o'método'write()'
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘w’)'
>>>2zf.write(“README.txt”)2
>>>'zf.close()'
'

14!
Mas se eu quiser adicionar
compressão ?!
'
'
O'Módulo' zlib' é' necessário.' Se' es@ver' disponível' você' pode'
configurar' ' o' modo' de' compressão.' O' padrão' é' o'
zpfile.ZIP_STORED2
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'import'zlib'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘w’)'
>>>2zf.write(“README.txt”2,2compress_type2=2zipfile.ZIP_DEFLATED)2
>>>'zf.close()'
'

15!
Mas se eu quiser adicionar
compressão ?!
'
'
O'Módulo' zlib' é' necessário.' Se' es@ver' disponível' você' pode'
configurar' ' o' modo' de' compressão.' O' padrão' é' o'
zpfile.ZIP_STORED2
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘w’)'
>>>2zf.write(“README.txt”2,2compress_type2=2zipfile.ZIP_DEFLATED)2
>>>'zf.close()'
'
Se(déssemos(um(print(em((
ge\(‘README.txt’)(obteríamos:(
(
README.txt'
''''''''Comment:'
''''''''Modified:'''''''2007^12^16'10:08:50'
''''''''System:'''''''''3'(0'='Windows,'3'='Unix)'
''''''''ZIP'version:''''20'
22222222Compressed:22222632bytes2
''''''''Uncompressed:'''75'bytes'
(

16!
Dicas interessantes!
'
'
Se'quisermos'adicionar'um'arquivo'dentro'de'um'arquivo'zip'com'
um'nome'diferente'do'nome'original'?'
'
Python'Aula'Extra'
>>>'zf.write(‘README.txt’,'arcname'='‘NOT_README.txt’)'
'
'
Se' quisermos' escrever' dados' que' não' vem' de' um' arquivo.'
Simplemente'escrevendo'string'de'bytes'em'um'arquivo'direto'?'
'
'>>>'zf.writestr(‘from_string.txt’,''‘vamos'adicionar'direto'de'uma'string’)'
Mensagem'em'string'

17!
Adicionando arquivos!
'
'
Adicionar'novos'arquivos'a'um'arquivo'zip'existente'basta'abri^lo'
no'modo'append''‘a’.2
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.ZipFile(‘example.zip’,'‘a’)'
>>>2zf.write(“exercicio.py”)2
>>>'zf.close()'
'

18!
Importando módulos de um arquivo zip!
'
'
Desde'a'versão'2.3,'Python'permite'importar'módulos'direto'de'
um'arquivo'zip'desde'que'este'esteja'no'sys.path'.'2
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.PyZipFile(‘example.zip’,'mode=‘w’)'
>>>2zf.writepy(“.”)2
>>>'zf.close()'
'
'
'
Para'escrita'de'arquivos:'2
'

19!
Importando módulos de um arquivo zip!
'
'
Desde'a'versão'2.3,'Python'permite'importar'módulos'direto'de'
um'arquivo'zip'desde'que'este'esteja'no'sys.path'.'2
'
Python'Aula'Extra'
>>>'import'zipfile'
>>>'zf'='zipfile.PyZipFile(‘example.zip’,'mode=‘w’)'
>>>2zf.writepy(“.”)2
>>>'zf.close()'
'
'
'
Para'escrita'de'arquivos:'2
'
Quando(chamamos(a(função(writepy(),( a(
classe(PyZipFile(procura(no(diretório(
passado(como(parâmetro(arquivos(.py(e(
adiciona(os(arquivos(compilados(.pyo(
ou(.pyc(dentro(do(arquivo(zip.(Se(estes(não(
exis\\rem(um(.pyc(é(criado(e(adicionado.(
(
(
Modo(debug>((((zf.debug((=3(

20!
Importando módulos de um arquivo zip!
'
'
Desde'a'versão'2.3,'Python'permite'importar'módulos'direto'de'
um'arquivo'zip'desde'que'este'esteja'no'sys.path'.'2
'
Python'Aula'Extra'
>>>'import'sys'
>>>'sys.path.insert(0,'‘example.zip’)'
>>>'import'example'
>>>'example.__file__'
example.zip/example.pyc'
'
'
Para'leitura'de'arquivos:'2
'

21!
Criando e Abrindo Arquivos ZIP!
Marcel Pinheiro Caraciolo!
Python'Aula'Extra'