arquivos zip com python - aula pycursos

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

Upload: marcel-caraciolo

Post on 18-Dec-2014

2.458 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Arquivos Zip com Python - Aula PyCursos

1

Criando e Abrindo Arquivos ZIP

Marcel Pinheiro Caraciolo Python  Aula  Extra  

Page 2: Arquivos Zip com Python - Aula PyCursos

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  

Page 3: Arquivos Zip com Python - Aula PyCursos

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  

Page 4: Arquivos Zip com Python - Aula PyCursos

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.  

Page 5: Arquivos Zip com Python - Aula PyCursos

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”]  

Page 6: Arquivos Zip com Python - Aula PyCursos

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  

Page 7: Arquivos Zip com Python - Aula PyCursos

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  

Page 8: Arquivos Zip com Python - Aula PyCursos

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.  

Page 9: Arquivos Zip com Python - Aula PyCursos

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  

Page 10: Arquivos Zip com Python - Aula PyCursos

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.  

Page 11: Arquivos Zip com Python - Aula PyCursos

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!  

Page 12: Arquivos Zip com Python - Aula PyCursos

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.  

Page 13: Arquivos Zip com Python - Aula PyCursos

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()    

Page 14: Arquivos Zip com Python - Aula PyCursos

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()    

Page 15: Arquivos Zip com Python - Aula PyCursos

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    

Page 16: Arquivos Zip com Python - Aula PyCursos

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  

Page 17: Arquivos Zip com Python - Aula PyCursos

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()    

Page 18: Arquivos Zip com Python - Aula PyCursos

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:      

Page 19: Arquivos Zip com Python - Aula PyCursos

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  

Page 20: Arquivos Zip com Python - Aula PyCursos

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:      

Page 21: Arquivos Zip com Python - Aula PyCursos

21

Criando e Abrindo Arquivos ZIP

Marcel Pinheiro Caraciolo Python  Aula  Extra