Arquivos Zip com Python - Aula PyCursos
-
Upload
marcel-caraciolo -
Category
Technology
-
view
2.461 -
download
1
description
Transcript of Arquivos Zip com Python - Aula PyCursos
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 def print_info(archive_name): 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: 2007-‐12-‐16 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 def print_info(archive_name): 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
Existem outras informações que podem ser ob\das além das apresentadas. Recomendo a le itura 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 a rqu ivo não fo r 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’) >>> zf.write(“README.txt”) >>> 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_STORED
Python Aula Extra
>>> import zipfile >>> import zlib >>> zf = zipfile.ZipFile(‘example.zip’, ‘w’) >>> zf.write(“README.txt” , compress_type = zipfile.ZIP_DEFLATED) >>> 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_STORED
Python Aula Extra
>>> import zipfile >>> zf = zipfile.ZipFile(‘example.zip’, ‘w’) >>> zf.write(“README.txt” , compress_type = zipfile.ZIP_DEFLATED) >>> zf.close()
Se déssemos um print em ge\nfo(‘README.txt’) obteríamos: README.txt Comment: Modified: 2007-‐12-‐16 10:08:50 System: 3 (0 = Windows, 3 = Unix) ZIP version: 20 Compressed: 63 bytes 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’.
Python Aula Extra
>>> import zipfile >>> zf = zipfile.ZipFile(‘example.zip’, ‘a’) >>> zf.write(“exercicio.py”) >>> 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 .
Python Aula Extra
>>> import zipfile >>> zf = zipfile.PyZipFile(‘example.zip’, mode=‘w’) >>> zf.writepy(“.”) >>> zf.close()
Para escrita de arquivos:
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 .
Python Aula Extra
>>> import zipfile >>> zf = zipfile.PyZipFile(‘example.zip’, mode=‘w’) >>> zf.writepy(“.”) >>> zf.close()
Para escrita de arquivos:
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 .
Python Aula Extra
>>> import sys >>> sys.path.insert(0, ‘example.zip’) >>> import example >>> example.__file__ example.zip/example.pyc
Para leitura de arquivos:
21
Criando e Abrindo Arquivos ZIP
Marcel Pinheiro Caraciolo Python Aula Extra