gzip – Obsługa plików gzip
On 24 listopada, 2021 by adminKod źródłowy: Lib/gzip.py
Moduł ten udostępnia prosty interfejs do kompresji i dekompresji plików podobnie jak robiłyby to programy GNU gzip i gunzip.
Kompresję danych zapewnia moduł zlib
.
Moduł gzip
udostępnia klasę GzipFile
, a także funkcje dogodnościopen()
, compress()
i decompress()
.Klasa GzipFile
odczytuje i zapisuje pliki w formacie gzip, automatycznie kompresując lub dekompresując dane tak, że wyglądają one jak zwykłe obiekty plikowe.
Zauważ, że dodatkowe formaty plików, które mogą być dekompresowane przez programy gzip i gunzip, takie jak te produkowane przezcompress i pack, nie są obsługiwane przez ten moduł.
Moduł definiuje następujące elementy:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)Ś
Otwórz plik skompresowany gzipem w trybie binarnym lub tekstowym, zwracając obiekt file.
Trument filename może być rzeczywistą nazwą pliku (obiekt str
lubbytes
), lub istniejącym obiektem pliku do odczytu z lub zapisu do.
Tryb argumentu może być dowolny z 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
lub 'xb'
dla trybu binarnego, lub 'rt'
,'at'
, 'wt'
, lub 'xt'
dla trybu tekstowego. Domyślnie jest to 'rb'
.
Targ compresslevel jest liczbą całkowitą od 0 do 9, tak jak dla konstruktoraGzipFile
.
Dla trybu binarnego funkcja ta jest równoważna konstruktorowi GzipFile
: GzipFile(filename, mode, compresslevel)
. W tym przypadku, argumentyencoding, errors i newline nie mogą być podane.
Dla trybu tekstowego, tworzony jest obiekt GzipFile
i zawijany w instancjęio.TextIOWrapper
z określonym kodowaniem, zachowaniem obsługi błędów i zakończeniem(ami) linii.
Zmienione w wersji 3.3: Dodano obsługę nazwy pliku będącej obiektem pliku, obsługę trybu tekstowego oraz argumenty kodowania, błędów i nowej linii.
Zmienione w wersji 3.4: Dodano obsługę trybów 'x'
, 'xb'
i 'xt'
.
Zmienione w wersji 3.6: Akceptuje obiekt podobny do ścieżki.
exceptiongzip.
BadGzipFile
ś
Wyjątek podnoszony dla niepoprawnych plików gzip. Dziedziczy po OSError
.EOFError
i zlib.error
mogą być również podnoszone dla nieprawidłowych plików gzipfiles.
Nowość w wersji 3.8.
classgzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Konstruktor dla klasy GzipFile
, która symuluje większość metod obiektu file, z wyjątkiem metody truncate()
. Przynajmniej jedna z wartości fileobj i filename musi mieć wartość nietrywialną.
Nowa instancja klasy jest oparta na fileobj, który może być zwykłym plikiem, obiektemio.BytesIO
lub dowolnym innym obiektem symulującym plik. Domyślnie jest to None
, w którym to przypadku nazwa pliku jest otwierana w celu dostarczenia obiektu fileobj.
Gdy fileobj nie jest None
, argument filename jest używany tylko do uwzględnienia w nagłówku pliku gzip, który może zawierać oryginalną nazwę nieskompresowanego pliku. Domyślnie jest to nazwa pliku plikobj, jeśli można ją odróżnić; w przeciwnym razie domyślnie jest to pusty łańcuch i w tym przypadku oryginalna nazwa pliku nie jest uwzględniana w nagłówku.
Tryb argumentem może być dowolny z 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
lub 'xb'
, zależnie od tego, czy plik będzie odczytywany czy zapisywany. Domyślnie ustawiony jest tryb plikuobj, jeśli można go rozpoznać; w przeciwnym razie domyślnie ustawiony jest 'rb'
. W przyszłych wydaniach Pythona tryb z fileobj nie będzie używany. Lepiej jest zawsze podawać tryb do zapisu.
Zauważ, że plik jest zawsze otwierany w trybie binarnym. Aby otworzyć skompresowany plik w trybie tekstowym, użyj open()
(lub zawiń swoje GzipFile
wio.TextIOWrapper
).
Konkurs compresslevel jest liczbą całkowitą z zakresu od 0
do 9
kontrolującą poziom kompresji; 1
jest najszybsze i daje najmniejszą kompresję, a 9
jest najwolniejsze i daje największą kompresję. 0
to brak kompresji. Domyślnie jest to 9
.
Argument mtime jest opcjonalnym numerycznym znacznikiem czasu, który ma być zapisany w polu czasu ostatniej modyfikacji w strumieniu podczas kompresji. Powinien być podawany tylko w trybie kompresji. Jeśli zostanie pominięty lub None
, używany jest czas bieżący. Zobacz atrybut mtime
po więcej szczegółów.
Wywołanie metody GzipFile
obiektu close()
nie zamykafileobj, ponieważ możesz chcieć dołączyć więcej materiału po skompresowanych danych. Pozwala to również na przekazanie obiektu io.BytesIO
otwartego do zapisu jako fileobj i pobranie wynikowego bufora pamięci za pomocą metody getvalue()
obiektuio.BytesIO
.
GzipFile
obsługuje interfejs io.BufferedIOBase
, w tym iterację i instrukcję with
. Jedynie metodatruncate()
nie jest zaimplementowana.
GzipFile
udostępnia również następującą metodę i atrybut:
peek
(n)Ś
Odczytaj n nieskompresowanych bajtów bez przesuwania pozycji pliku.Aby spełnić żądanie, wykonywany jest co najwyżej pojedynczy odczyt na skompresowanym strumieniu. Liczba zwróconych bajtów może być większa lub mniejsza niż żądana.
Uwaga
Podczas gdy wywołanie peek()
nie zmienia pozycji pliku GzipFile
, może zmienić pozycję bazowego obiektu pliku (np. jeśli GzipFile
został skonstruowany z parametremfileobj).
Nowość w wersji 3.2.
mtime
ś
Podczas dekompresji, wartość pola czasu ostatniej modyfikacji w ostatnio odczytanym nagłówku może być odczytana z tego atrybutu, jako liczba całkowita. Wartość początkowa przed odczytaniem jakichkolwiek nagłówków wynosi None
.
Wszystkie strumienie skompresowane gzip muszą zawierać pole thistimestamp. Niektóre programy, takie jak gunzip, wykorzystują znacznik czasu. Format jest taki sam, jak wartość zwracana przez time.time()
i atrybut st_mtime
obiektu zwracanego przez os.stat()
.
Zmienione w wersji 3.1: Dodano obsługę deklaracji with
, a także argumentu konstruktoratime i atrybutu mtime
.
Zmieniono w wersji 3.2: Dodano obsługę plików z zerowym paddingiem i unseekable.
Zmieniono w wersji 3.3: Zaimplementowano metodę io.BufferedIOBase.read1()
.
Zmieniono w wersji 3.4: Dodano obsługę trybów 'x'
i 'xb'
.
Zmieniono w wersji 3.5: Dodano obsługę zapisu arbitralnych obiektów typubytes.Metoda read()
przyjmuje teraz argumentNone
.
Zmieniono w wersji 3.6: Akceptuje obiekt podobny do ścieżki.
Deprecated since version 3.9: Otwieranie GzipFile
do zapisu bez podania argumentu modeargument is deprecated.
gzip.
compress
(data, compresslevel=9, *, mtime=None)Ś
Kompresuje dane, zwracając obiekt bytes
zawierający skompresowane dane. compresslevel i mtime mają takie samo znaczenie jak w konstruktorze GzipFile
powyżej.
Nowość w wersji 3.2.
Zmienione w wersji 3.8: Dodano parametr mtime dla odtwarzalności danych wyjściowych.
gzip.
decompress
(data)Ś
Dekompresja danych, zwrócenie obiektu bytes
zawierającego nieskompresowane dane.
Nowość w wersji 3.2.
Przykłady użyciaś
Przykład odczytu skompresowanego pliku:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Przykład tworzenia skompresowanego pliku GZIP:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Przykład kompresji istniejącego pliku GZIP:
import gzipimport shutilwith open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
Przykład, jak GZIP skompresować ciąg binarny:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Zobacz też
Moduł zlib
Podstawowy moduł kompresji danych potrzebny do obsługi formatu plików gzip.
Interfejs wiersza poleceńś
Moduł gzip
zapewnia prosty interfejs wiersza poleceń do kompresji plików ordecompress.
Po wykonaniu moduł gzip
zachowuje plik(i) wejściowy(e).
Zmienione w wersji 3.8: Dodanie nowego interfejsu wiersza poleceń z użyciem.Domyślnie, gdy użytkownik wykona CLI, domyślny poziom kompresji wynosi 6.
Opcje wiersza poleceńś
file
ś
Jeśli plik nie jest określony, odczytaj z sys.stdin
.
--fast
ś
Wskazuje najszybszą metodę kompresji (mniejsza kompresja).
--best
ś
Wskazuje najwolniejszą metodę kompresji (najlepsza kompresja).
-d
,
--decompress
ś
Dekompresuje podany plik.
-h
,
--help
ś
Pokazuje komunikat pomocy.
.
Dodaj komentarz