Operacje na plikach Zip, Tar, zlib w Pythonie

Pobieranie danych o zawartości pliku ZIP

Biblioteka zipfile w dość łatwy sposób umożliwia nam pobranie danych o pliku ZIP:
#!/usr/bin/env python
import zipfile
z = zipfile.ZipFile("plik.zip", "r")
for plik in z.namelist():
	print 'Plik: ', plik,
	bajty = z.read(plik)
	print 'ma', len(bajty), 'bajtow'
NIEKTÓRE MEDOTY BIBLIOTEKI ZIPFILE:
is_zipfile(nazwa pliku) - sprawdza czy podany plik to archiwum ZIP
ZipFile(nazwa_pliku, tryb, kompresja) - otwiera plik ZIP i zwraca instancję ZipFile. Tryb może przyjąć argumenty: r - czytanie istniejącego pliku, a - dodawanie do istniejącego pliku, w - nadpisanie istniejącego pliku. Kompresja - ZIP_STORED (domyślne) lub ZIP_DEFLATED. Instancja ZipFile dysponuje dodatkowymi modułami i atrybutami:
infolist() - zwraca listę obiektów ZipInfo dla wszystkich składników archiwum
namelist() - zwraca listę nazw składników archiwum
read(nazwa) - wczytuje zawartość archiwum dotyczącą składnika o podanej nazwie i zwraca w postaci napisu
write(nazwa pliku, archiwum, kompresja) - zapisuje plik w archiwum
import zipfile
if zipfile.is_zipfile("nazwa_pliku"):
	print "to zip"
else:
	print "nie jest to zip"
Pobieranie danych z plików OpenOffice:
import zipfile
z = zipfile.ZipFile("plik.odt", "r")
print z.read('content.xml')
Pliki OOfice to pliki zip. Treść jest w /content.xml a jeżeli plik zawiera grafikę to pliki będą w katalogu /Pictures/

Tworzenie archiwum tar

By stworzyć archiwum tar (tar.bz2, tar.gz, tar) z katalogu i jego zawartości wystarczy skorzystać z modułu tarfile:
import tarfile
tar = tarfile.TarFile.open('ścieżka/plik.tar.bz2', 'w:bz2')
tar.add('ścieżka do katalogu')
tar.close()


Kompresja plików za pomocą zlib

Chcemy skompresować wszystkie pliki z danego katalogu za pomocą biblioteki zlib. Niniejszy skrypt pokaże listę plików oraz stopień zmniejszenia rozmiaru po kompresji:
import zlib
import glob

for file in glob.glob("katalog/*"):
	wejscie = open(file, "rb").read()
	wyjscie = zlib.compress(wejscie, zlib.Z_BEST_COMPRESSION)
	print file, len(wejscie), "=>", len(wyjscie),
	print "%d%%" % (len(wyjscie) * 100 / len(wejscie))
Jeżeli chcemy zapisać dany plik to możemy skrypt zmodyfikować tak:
import zlib
import glob

for file in glob.glob("katalog/*"):
	
	wejscie = open(file, "rb").read()
	wyjscie = zlib.compress(wejscie, zlib.Z_BEST_COMPRESSION)
	
	pliczek = file+'.zlib'
	plik = open(pliczek, 'w')
	plik.write(wyjscie)
	plik.close()
	
	print file, len(wejscie), "=>", len(wyjscie),
	print "%d%%" % (len(wyjscie) * 100 / len(wejscie))
RkBlog

Podstawy Pythona, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact