Oto następny artykuł o Pythonie 🔔! W tym materiale pokażę Ci jak w języku Python obsługiwać pliki zarchiwizowane (czyli archiwum ZIP), przy użyciu pakietu "zipfile" 🌟! Zobaczymy sobie dwie możliwości: tworzenie nowego archiwum ZIP 1️⃣ oraz odczytywanie plików z niego 2️⃣! Zapraszam 😉!
PRZEDSTAWIAM JAK KORZYSTAĆ Z "ZIPFILE" W JĘZYKU PYTHON!
Standardowo przedstawię Ci co nieco informacji na temat samego pakietu, a potem przejdziemy do 2 rodzajów obsługi archiwum: zapis 💾 i odczyt 👀!
CZYM JEST "ZIPFILE" W JĘZYKU PYTHON?
W Pythonie, "zipfile" odnosi się do pakietu służącego do obsługi plików postaci archiwum ZIP 📦. Dzięki niemu możesz stworzyć takie archiwum, dodać do niego pliki, a także przeprowadzać operacje w drugą stronę, czyli odczytać pliki z archiwum, a nawet je wypakować, tak jak to robisz za każdym razem przy użyciu przycisku "Wypakuj" w systemie operacyjnym 😄!
I to wszystko, co można o nim sensownego napisać (więcej informacji możesz znaleźć w oficjalnej dokumentacji 📖), więc przejdźmy dalej ⏩!
JAK ZAINSTALOWAĆ PAKIET "ZIPFILE" W JĘZYKU PYTHON?
Nie musisz niczego instalować 🙂. Jest to pakiet wbudowany w standardową bibliotekę Pythona, więc możemy od razu przejść do ukazania obsługi 👍.
JAK SKORZYSTAĆ Z PAKIETU "ZIPFILE" W JĘZYKU PYTHON?
"zipfile" umożliwia przeprowadzanie operacji związanych z archiwum ZIP zarówno w kontekście zapisu, jak i odczytu. Stąd też, podzielimy sobie to zagadnienie na 2 części 🙂.
W obu przypadkach należy wpierw zaimportować pakiet ↩️. Tak jak zwykle, u samej góry skryptu, wpisujemy sobie niniejszy wiersz 👇:
import zipfileTo się nazywa "instrukcja importu" ℹ️. Gdy ją zastosujemy, możemy korzystać z wartości i funkcji jakie nam ten pakiet udostępnia 🔓. Natomiast jak potrzebujesz tylko konkretną część pakietu, to Python posiada drugą formę zapisu z użyciem słowa "from" 👇:
from zipfile import [wartość/metoda występująca w module]Należy pamiętać, że oba zapisy wpływają na późniejsze odwoływanie się do poszczególnych składowych tego pakietu ⚠️. Więcej informacji na ten temat, zostanie zawartych w osobnych artykułach ℹ️. Do prezentacji przykładów, będę korzystał z pierwszego zapisu 🙂.
Teraz mogę przejść do ukazania operacji na archiwum ZIP w obie strony 😊. Zaczniemy od zapisu 💾.
JAK WYKONAĆ ZAPIS DO ARCHIWUM ZIP W JĘZYKU PYTHON?
Celem wykonania w Pythonie zapisu jakiegoś pliku do archiwum ZIP, musimy najpierw utworzyć osobny plik archiwum, aby potem dodać do niego pliki 💡.
JAK UTWORZYĆ NOWE ARCHIWUM ZIP W JĘZYKU PYTHON?
Nowe archiwum ZIP tworzymy bardzo łatwo korzystając z udostępnionego konstruktora "ZipFile" (pierwsze litery obu słów jako duże ℹ️) 👇:
my_zipfile = zipfile.ZipFile('my_zip.zip', 'w')W ten sposób powstanie nowy plik w formacie ".zip" w tej samej lokalizacji, w której znajduje się skrypt z powyższą instrukcją ❤️. Rzućmy okiem na samą postać 👀!
Jeżeli udało Ci się przeczytać artykuł o zapisie do pliku tekstowego, to bez problemu skojarzysz te same postaci obu parametrów 💪!
W pierwszym parametrze wprowadzamy łańcuch znaków jako ścieżkę względną archiwum jakie ma zostać utworzone, czyli po prostu w jakim katalogu ma się ono znaleźć, jaką ma przyjąć nazwę i jakie rozszerzenie 1️⃣. Ścieżka względna to taka ścieżka, której "miejscem początkowym" albo "korzeniem" jest katalog zawierający skrypt ℹ️.
W drugim parametrze wprowadzamy tryb obsługi pliku, także w postaci łańcucha 2️⃣. 'w' oznacza utworzenie nowego archiwum, a w przypadku istnienia o tej samej nazwie, nadpisanie jego zawartości bez pytania Ciebie o zdanie 💥. Jeżeli zechcesz dodawać nowe pliki do archiwum bez tracenia aktualnej postaci, sięgnij wtedy po tryb 'a' 👍. Pozostałe tryby zostały przeze mnie przedstawione w artykule o zapisie do pliku tekstowego, więc już nie będę tego powtórnie wypisywać 🙃.
Konstruktor klasy "ZipFile" w trybie do zapisu, tworzy nowe archiwum ZIP o podanej lokalizacji i nazwie, a jeżeli już taki plik istnieje, to go nadpisuje.
To wszystko z części przygotowawczej. Teraz mając pewność, że archiwum jest na swoim miejscu, możemy zacząć dodawać do niego pliki 📂!
JAK DODAĆ PLIK DO ARCHIWUM ZIP W JĘZYKU PYTHON?
Korzystamy z metody "write" pliku jaki otrzymaliśmy na wyjściu działania konstruktora "ZipFile" i wskazujemy w parametrze łańcuch znaków oznaczający ścieżkę względną do pliku razem z rozszerzeniem 🔥. To jest przykład 👇:
my_zipfile.write('my_file.txt')Jeżeli plik o podanej ścieżce, nazwie i rozszerzeniu istnieje, to zostanie on pomyślnie dodany do archiwum ➕. W przeciwnym razie, Python przerwie dalsze działanie programu (chyba, że przechwycimy wyjątek ❗) zgłaszając błąd "FileNotFoundError" ⛔.
Metoda "write" po dodaniu ścieżki do wskazanego pliku, dodaje go do archiwum ZIP, jeśli istnieje. W przypadku niepowodzenia, Python zgłasza błąd o nieznalezieniu pliku!
JAK PRAWIDŁOWO ZAKOŃCZYĆ ZAPIS DO ARCHIWUM ZIP W JĘZYKU PYTHON?
Po zakończeniu pisania wszystkich instrukcji dotyczących zapisu plików do archiwum ZIP, należy obowiązkowo dodać wywołanie metody "close" 👇:
my_zipfile.close()Wtedy archiwum ZIP zostanie oznaczone jako "zamknięte" 🔒 i tak powinno być po zakończeniu wszelkich operacji na każdym pliku ✅. W przeciwnym razie będziesz mieć problemy z dalszą obsługą tego pliku przez system operacyjny 😬!
No to teraz w drugą stronę - odczyt 😄!
JAK WYKONAĆ ODCZYT Z ARCHIWUM ZIP W JĘZYKU PYTHON?
Aby móc w Pythonie przeprowadzić dowolne operacje odczytu na wskazanym archiwum ZIP, należy wpierw otworzyć sam plik 🔓.
JAK OTWORZYĆ ARCHIWUM ZIP W JĘZYKU PYTHON?
Otwieranie pliku archiwum ZIP nie różni się zbytnio od otwierania pliku tekstowego, tylko zamiast funkcji "open", korzystamy z konstruktora "ZipFile" 👇:
my_zipfile = zipfile.ZipFile('my_zip.zip', 'r')To sprawi "otwarcie" archiwum ZIP do dalszej obsługi pod kątem odczytu 👍. Wyjaśniam postać wywołania 📣! Dodam, że bardzo podobny zapis dotyczy odczytu pliku tekstowego, więc jak umiesz ten temat, to bez trudu opanujesz ten 👍.
Najpierw podajemy łańcuch znaków jako ścieżkę względną do archiwum ZIP, wraz z bezbłędnie podaną nazwą i rozszerzeniem 1️⃣. Pisząc inaczej, wskazujesz funkcji gdzie ma szukać archiwum, o jakie Ci chodzi 🙂. Ścieżka względna jest ścieżką, w której katalog z naszym skryptem jest jej "miejscem początkowym" czy też "korzeniem" ℹ️
Następnie podajemy tryb obsługi tego pliku, również w postaci łańcuchowego typu danych 2️⃣. 'r' jest przeznaczony do odczytu danego pliku, o ile on oczywiście istnieje. Pozostałe tryby obsługi pliku zaprezentowałem w artykule o odczytywaniu zawartości plików tekstowych, więc przejdź bezpośrednio tam, jeśli Cię one interesują 😉.
Konstruktor klasy "ZipFile" w trybie do odczytu, próbuje otworzyć archiwum ZIP o wskazanej lokalizacji. Jeżeli nie uda się tego zrobić, Python zgłasza błąd o braku występowania wskazanego pliku ZIP!
Mając otwieranie pliku archiwum ZIP, można przejść do ukazania metod pozwalających na przeglądanie jego zawartości 🔍!
JAK ODCZYTAĆ ZAWARTOŚĆ ARCHIWUM ZIP W JĘZYKU PYTHON?
"zipfile" w języku Python udostępnia metodę "namelist" zwracającą listę łańcuchów znaków reprezentujących ścieżki wszystkich znalezionych plików 📁. Tak wygląda prosty przykład użycia 👇:
for filename in my_zipfile.namelist():
print(filename)Ponieważ lista jest sekwencją, możemy bez problemu osadzić ją wewnątrz pętli "for" 👍. Uruchomienie programu z powyższą konstrukcją wypisze wszystkie ścieżki do plików będących w środku archiwum 📜.
Metoda "namelist" zwraca listę łańcuchów znaków oznaczających ścieżki do znalezionych plików w archiwum ZIP.
Teraz ciekawsza operacja 😉! Zobaczmy jak wypakowywać pliki z archiwum ZIP 🤩!
JAK WYPAKOWAĆ ZAWARTOŚĆ ARCHIWUM ZIP W JĘZYKU PYTHON?
Są 2 metody pakietu "zipfile" pozwalające na wypakowanie zawartości archiwum ZIP w języku Python 👇:
- extract,
- extractall.
"extract" służy do wypakowywania jednego wskazanego pliku po podanej ścieżce względnej ℹ️. Oto przykład 👇:
my_zipfile.extract('my_file.txt')Metoda "wejdzie" do archiwum ZIP w poszukiwaniu pliku 🔍. Gdy go znajdzie, to wykona dokładnie to samo, co robimy klikając na przycisk "Wypakuj" ze znanych oprogramowań do obsługi archiwum ZIP, a po chwili plik pojawi się w tym samym katalogu, z którego uruchamiamy skrypt 🙂. W przypadku nieznalezienia pliku, Python zgłasza błąd "KeyError" i dochodzi do przerwania programu, jeśli ten wyjątek nie został przechwycony 💥.
Metoda "extract" podejmuje próbę wypakowania pliku o podanej ścieżce względnej. W przypadku niepowodzenia, Python zgłasza błąd o nieznalezieniu pliku o podanej ścieżce.
Jeżeli interesuje Cię wypakowanie wszystkich plików z archiwum "jak leci" 😅, wtedy korzystasz z metody "extractall", która nie potrzebuje żadnych parametrów 😉. To jest przykład użycia (i jedyny sposób wywołania tej metody 🙂) 👇:
my_zipfile.extractall()Chyba tego już nie trzeba tłumaczyć 😁.
Metoda "extractall" wypakowuje wszystkie pliki z archiwum ZIP.
Warto wspomnieć, że w obu przypadkach jeżeli któryś z plików o tej samej nazwie już znajduje się w tej samej ścieżce, to zostanie on nadpisany bez ostrzeżenia, także trzeba uważać 😱!
JAK PRAWIDŁOWO ZAKOŃCZYĆ ODCZYT ARCHIWUM ZIP W JĘZYKU PYTHON?
Gdy skończysz obsługiwać odczyt pliku ZIP (albo jakiegokolwiek innego), zawsze wywołuj na końcu metodę "close" 👇:
my_zipfile.close()To zamknie plik, co jest jednoznaczne z zakończeniem przeprowadzania na nim czynności 🔒. Nie wolno o tym zapomnieć, gdyż wtedy system operacyjny będzie interpretował ten plik nadal jako "otwarty" i nie będziesz w stanie wykonywać na nim żadnych operacji, takich jak zmiana nazwy czy przeniesienie do kosza 😐.
To wszystko na ten temat 😊. Pakiet "zipfile" w języku Python jest prościutki w obsłudze i idealny do programowania prostego zarządzania archiwum ZIP 👍.