| 1 | ||
| 
              Editor: pycz
               Time: 2006/06/02 15:48:13 GMT+0  | 
          ||
| Note: | ||
changed: - Archivace a Balení v Pythonu Díky zipu tyto dva termíny většinou splývají, protože zip umí oboje. Původní význam těchto termínu je asi takový: Archivace je prosté nakopírování více souborů do jednoho (tar). Balení je komprimace jednoho souboru do jiného (jeden do jednoho) (gzip). Příklad tar :: import tarfile tar = tarfile.open("sample.tar", "w") for name in ["foo", "bar", "quux"]: tar.add(name) tar.close() Příklad zip :: import zipfile, os fzip = zipfile.ZipFile('soubor.zip', 'w') slozkaVse=os.listdir(".") # vse - soubory i slozky slozkaSoubory = [soubor for soubor in slozkaVse if os.path.isfile(soubor)] # jen soubory slozkaSoubory.remove("soubor.zip") # abychom nebalili sami sebe for soubor in slozkaSoubory: print 'Balim ' + soubor fzip.write(soubor) fzip.close() Příklad gzip :: import gzip, os seznam=[s for s in os.listdir('.') if os.path.isfile(s)] for s in seznam: g=gzip.GzipFile(s+'.gz','w') x=file(s,'rb').read() # 'rb' je důležité nejen pro binárky, ale i pro .doc, .xls, apod... g.write(x) g.close() Příklad bzip + tar :: outpath = '' import glob import tarfile import os.path ftar = tarfile.open('soubor.tar.bz2', 'w:bz2') allfiles = glob.glob(os.path.join(outpath,'*')) for i in allfiles: print 'Adding ' + i ftar.add(i, os.path.basename(i)) ftar.close() Vytvoření taru se změnou vlastnostní souboru Následující kus kódu zabalí podadresář aktuálního adresáře jehož jméno obsahuje proměnná 'start'. Souborům, jejichž jméno končí na 'configure' budou nastavena unixová práva spustitelného souboru, ostatní soubory budou nespustitelné. To se může hodit např. při vytváření archívu určeného pro Linux z Windows. :: from glob import glob from os.path import isdir from tarfile import * start = 'jmeno_adresare' tar = TarFile('jmeno_souboru.tar', 'w') def work(path): files = glob(path + '/*') for i in files: if isdir(i): ti = tar.gettarinfo(i, i[len(start)+1:]) tar.addfile(ti) work(i) else: ti = tar.gettarinfo(i, i[len(start)+1:]) if i.endswith('configure'): ti.mode = 0775 else: ti.mode = 0664 f = file(i, 'rb') tar.addfile(ti, f) f.close() work(start) tar.close()
Díky zipu tyto dva termíny většinou splývají, protože zip umí oboje. Původní význam těchto termínu je asi takový: Archivace je prosté nakopírování více souborů do jednoho (tar). Balení je komprimace jednoho souboru do jiného (jeden do jednoho) (gzip).
    import tarfile
    tar = tarfile.open("sample.tar", "w")
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
    tar.close()
    import zipfile, os
    fzip = zipfile.ZipFile('soubor.zip', 'w')
    slozkaVse=os.listdir(".")   # vse - soubory i slozky
    slozkaSoubory = [soubor for soubor in slozkaVse if os.path.isfile(soubor)]  # jen soubory
    slozkaSoubory.remove("soubor.zip")    # abychom nebalili sami sebe
    for soubor in slozkaSoubory:
        print 'Balim ' + soubor
        fzip.write(soubor)
    fzip.close()
    import gzip, os
    seznam=[s for s in os.listdir('.') if os.path.isfile(s)]
    for s in seznam:
        g=gzip.GzipFile(s+'.gz','w')
        x=file(s,'rb').read()  # 'rb' je důležité nejen pro binárky, ale i  pro .doc, .xls, apod...
        g.write(x)
        g.close()
    outpath = ''
    import glob
    import tarfile
    import os.path
    ftar = tarfile.open('soubor.tar.bz2', 'w:bz2')
    allfiles = glob.glob(os.path.join(outpath,'*'))
    for i in allfiles:
        print 'Adding ' + i
        ftar.add(i, os.path.basename(i))
    ftar.close()
  Následující kus kódu zabalí podadresář aktuálního adresáře jehož jméno
 obsahuje proměnná start. Souborům, jejichž jméno končí na configure
 budou nastavena unixová práva spustitelného souboru, ostatní soubory
 budou nespustitelné. To se může hodit např. při vytváření archívu určeného
 pro Linux z Windows.
   from glob import glob
   from os.path import isdir
   from tarfile import *
   start = 'jmeno_adresare'
   tar = TarFile('jmeno_souboru.tar', 'w')
   def work(path):
       files = glob(path + '/*')
       for i in files:
           if isdir(i):
               ti = tar.gettarinfo(i, i[len(start)+1:])
               tar.addfile(ti)
               work(i)
           else:
               ti = tar.gettarinfo(i, i[len(start)+1:])
               if i.endswith('configure'):
                   ti.mode = 0775
               else:
                   ti.mode = 0664
               f = file(i, 'rb')
               tar.addfile(ti, f)
               f.close()
    work(start)
    tar.close()