W tej lekcji przestudiujemy, w jaki sposób możemy skorzystać z Pythona gzip Moduł do odczytu i zapisywania w kompresowanych plikach w Python. Największą funkcją, jaką zapewnia nam ten moduł, jest to, że możemy traktować kompresowane pliki jako normalne obiekty plików, które zapisują nas od złożoności zarządzania plikami i ich cyklu życia w naszym kodzie i pozwala nam skupić się na podstawowej logice biznesowej programu programu. gzip Moduł zapewnia nam prawie takie same funkcje, jak takie programy GNU Gunzip I gzip.
Pisanie skompresowanych plików z Open ()
Zaczniemy od podstawowego przykładu, w którym możemy utworzyć plik GZIP i zapisać w nim niektóre dane. W tym celu musimy wykonać plik i otworzyć go w trybie zapisu, aby dane mogły być w nim wstawione. Spójrzmy na przykładowy program, z którym możemy zapisać dane w pliku GZIP:
importować gzip
Importuj IO
Import OS
Output_file = 'Linxhint_demo.tekst.GZ '
write_mode = 'wb'
Z GZIP.Open (Output_File, Write_mode) jako wyjście:
z IO.Textiowrapper (wyjście, kodowanie = 'utf-8') jako kod:
kodować.Napisz („Możemy napisać wszystko, co chcemy do pliku.\N')
drukuj (plik wyjściowy,
„zawiera”, OS.Stat (Output_file).st_size, „bajty”)
OS.System ('File -b - -Mime '.Format (Output_file))
Oto, co wracamy z tym poleceniem:
Pisanie do pliku zip
Jeśli teraz spojrzysz na strukturę folderów, w której wykonałeś ten skrypt, powinien być nowy plik wymieniony z tym, co podaliśmy w naszym programie powyżej.
Zapisanie wielu wierszy w kompresowanym pliku
Możemy również napisać wiele wierszy lub w rzeczywistości dowolną liczbę linii w naszym pliku GZIP w bardzo podobny sposób, jak w poprzednim przykładzie. Aby uzyskać ten przykład inny, skorzystamy również z modułu IterTools. Spójrzmy na przykładowy program:
importować gzip
Importuj IO
Import OS
importować itertools
Output_file = 'Linxhint_demo.tekst.GZ '
write_mode = 'wb'
Z GZIP.Open (Output_File, Write_mode) jako wyjście:
z IO.Textiowrapper (wyjście, kodowanie = 'utf-8') jako enc:
enc.pisarze (
IterTools.powtórz („Linuxhint, powtarzanie tej samej linii!.\ n ', 10)
)
OS.System ('gzcat linxhint_demo.tekst.GZ ')
Zobaczmy dane wyjściowe tego polecenia:
Pisanie wielu wierszy
Odczyt skompresowanych danych
Możemy również odczytać skompresowany plik, który stworzyliśmy w ostatnim przykładzie za pomocą modułu GZIP z bardzo prostym wywołaniem otwarty funkcjonować:
importować gzip
Importuj IO
Import OS
plik_name = 'linxhint_demo.tekst.GZ '
file_mode = 'rb'
Z GZIP.Open (plik_nazwa, plik_mode) jako input_file:
z IO.Textiowrapper (input_file, kodowanie = 'utf-8') jako dec
Drukuj (dec.Czytać())
Oto, co wracamy z tym poleceniem:
Czytanie pliku GZIP
Czytanie strumieni
Ze względu na fakt, że pliki tekstowe mogą być bardzo duże, mądrze jest otwierać te pliki w strumieniu, a nie ładowanie pełnego pliku w jednym obiekcie, który zajmuje wiele pamięci systemu, a w niektórych przypadkach może nawet powodować ten proces całkowicie się rozbić. Spójrzmy na przykładowy program, który odczytał podany kompresowany plik w strumieniu:
importować gzip
z IO Import Bajtesio
import binascii
tryb_write = 'wb'
tryb_read = 'rb'
non_compressed = b'repeated linia x czas.\ n ' * 8
print („Dane bez sprężania:”, len (niekompresja))
Drukuj (niekompresyjny)
buf = bajteSio ()
Z GZIP.GZIPFILE (tryb = tryb_write, fileobj = buf) jako plik:
plik.Write (Non_Compressed)
Compressed = BUF.getValue ()
print („Dane skompresowane:”, len (skompresowany))
Drukuj (binascii.hexlify (sprężone))
in_buffer = bajtesio (skompresowany)
Z GZIP.GZIPFILE (tryb = tryb_read, fileobj = in_buffer) jako plik:
read_data = plik.odczyt (len (non_compressed))
print ('\ nReading It ponownie:', len (read_data))
print (read_data)
Zobaczmy dane wyjściowe tego polecenia:
Czytanie pliku GZIP w strumieniu
Chociaż program był nieco długi, właściwie po prostu użyliśmy modułów Python otwierają plik i przesyłaj strumieniowo treść do konsoli za pomocą buforowanego obiektu czytnika.
Wniosek
W tej lekcji przyjrzeliśmy się, w jaki sposób możemy wykorzystać moduł Python GZIP do kompresji i dekompresji plików w Python. Największą funkcją, którą zapewnia nam ta biblioteka, jest to, że możemy traktować kompresowane pliki jako normalne obiekty plików.
Przeczytaj więcej postów opartych na Pythonie tutaj.