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