Jak tworzyć i manipulować archiwami smoły za pomocą Pythona

Jak tworzyć i manipulować archiwami smoły za pomocą Pythona

W systemie Linux i innych systemów operacyjnych podobnych do UNIX TAR jest niewątpliwie jednym z najczęściej używanych narzędzi archiwizacji; Pozwól nam tworzyć archiwa, często nazywane „Tarballs”, możemy użyć do celów dystrybucji kodu źródłowego lub tworzenia kopii zapasowych. W tym samouczku zobaczymy, jak czytać, tworzyć i modyfikować archiwa TAR za pomocą Pythona, używając Tarfile moduł.

W tym samouczku nauczysz się:

  • Tryby, w których archiwum smoły można otworzyć za pomocą modułu Tarfile
  • Jakie są klasy Tarinfo i Tarfile i co reprezentują
  • Jak wymienić zawartość archiwum smoły
  • Jak wyodrębnić zawartość archiwum smoły
  • Jak dodać pliki do archiwum smoły


Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu
Oprogramowanie Python3
Inny Podstawowa znajomość programowania Python3 i obiektowego
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Podstawowe użycie

Tarfile Moduł jest zawarty w bibliotece Standard Python, więc nie musimy go instalować osobno; Aby go użyć, musimy tylko „zaimportować”. Zalecanym sposobem dostępu do tarbball za pomocą tego modułu jest przez otwarty funkcjonować; W najbardziej podstawowym użyciu musimy zapewnić, jako pierwsze i drugie argumenty:

  • Nazwa Tarball, do której chcemy uzyskać dostęp
  • Tryb, w którym należy go otworzyć

„Tryb” używany do otwarcia archiwum smoły zależy od akcji, którą chcemy wykonać i od typu kompresji (jeśli istnieje) w użyciu. Zobaczmy je razem.

Otwieranie archiwum w trybie tylko do odczytu

Jeśli chcemy zbadać lub wyodrębnić zawartość archiwum TAR, możemy użyć jednego z następujących trybów, aby otworzyć go tylko do odczytu:

Tryb Oznaczający
'R' Tryb tylko odczyt - Typ kompresji zostanie automatycznie obsługiwany
'R:' Tryb tylko do odczytu bez kompresja
„R: GZ” Tryb tylko do odczytu - zamek błyskawiczny Kompresja wyraźnie określona
„R: BZ2” Tryb tylko do odczytu - BZIP Kompresja wyraźnie określona
„R: xz” Tryb tylko do odczytu - LZMA Kompresja wyraźnie określona

W większości przypadków, w których można łatwo wykryć metodę kompresji, zalecany tryb do użycia jest 'R'.

Otwarcie archiwum do dołączania plików

Jeśli chcemy dołączyć pliki do istniejącego archiwum, możemy użyć 'A' tryb. Ważne jest, aby zauważyć, że możliwe jest dołączenie do archiwum tylko wtedy, gdy nie jest skompresowane; Jeśli spróbujemy otworzyć skompresowane archiwum w tym trybie, a ValueerRor Wyjątek zostanie podniesiony. Jeśli odniesiemy się do nieistniejącego archiwum, zostanie utworzone w locie.

Otwieranie archiwum do pisania

Jeśli chcemy wyraźnie stworzyć nowy archiwum i otworzyć go do pisania, możemy użyć jednego z następujących trybów:

Tryb Oznaczający
„W” Otwórz archiwum do pisania - nie używaj kompresji
„W: GZ” Otwórz archiwum do pisania - Użyj gzip kompresja
„W: BZ” Otwórz archiwum do pisania - Użyj BZIP2 kompresja
„W: xz” Otwórz archiwum do pisania - Użyj LZMA kompresja

Jeśli istniejący plik archiwum jest otwarty do pisania, jest on obcięty, więc cała jego treść jest odrzucana. Aby uniknąć takich sytuacji, możemy chcieć otworzyć archiwum wyłącznie, jak opisano w następnym rozdziale.

Utwórz archiwum tylko wtedy, gdy nie istnieje

Kiedy chcemy mieć pewność, że istniejący plik nie jest zastąpiony podczas tworzenia archiwum, musimy go otworzyć wyłącznie. Jeśli używamy 'X' tryb i plik o tej samej nazwie tego, który określono dla archiwum, a FileExistSerror zostanie podniesiony. Metody kompresji można określić w następujący sposób:

Tryb Oznaczający
'X' Utwórz archiwum bez kompresji, jeśli nie istnieje
„X: GZ” Utwórz archiwum z gzip Kompresja tylko wtedy, gdy nie istnieje
„X: BZ2” Utwórz archiwum z BZIP2 Kompresja tylko wtedy, gdy nie istnieje
„x: xz” Utwórz archiwum z LZMA Kompresja tylko wtedy, gdy nie istnieje

Praca z archiwami

Istnieją dwie klasy dostarczane przez Tarfile moduł używany do interakcji z archiwami smoły i ich zawartością, i są odpowiednio: Tarfile I Tarinfo. Ten pierwszy służy do reprezentowania archiwum smoły w całości i może być używany jako Menedżer kontekstowy z Pythonem z Oświadczenie, ten ostatni służy do reprezentowania członka archiwum i zawiera różne informacje o nim. Jako pierwszy krok skupimy się na niektórych z najczęściej używanych metod Tarfile Klasa: Możemy ich użyć do wykonywania wspólnych operacji w archiwach TAR.

Odzyskanie listy członków archiwum

Aby pobrać listę członków archiwum, możemy użyć Getmembers Metoda a Tarfile obiekt. Ta metoda zwraca listę Tarinfo obiekty, jeden dla każdego członka archiwum. Oto przykład jego użycia z manekinem skompresowanego archiwum zawierającego dwa pliki:

>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.getMembers () ... [[[, ] 
Kopiuj

Jak zobaczymy później, możemy uzyskać dostęp do niektórych atrybutów zarchiwizowanego pliku, jako czas własności i modyfikacji, za pośrednictwem odpowiedniego Tarinfo Właściwości i metody obiektu.

Wyświetlanie zawartości archiwum smoły

Jeśli tylko chcemy wyświetlić zawartość archiwum smoły, możemy otworzyć ją w trybie odczytu i użyć lista Metoda Tarfile klasa.

>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.lista() ... ?RW-R-R-EGDOC/EGDOC 0 2020-05-16 15:45:45 File1.tekst ?RW-R-R-EGDOC/EGDOC 0 2020-05-16 15:45:45 File2.tekst 
Kopiuj

Jak widać listę plików zawartych w archiwum, jest wyświetlana jako wyjście. lista Metoda akceptuje parametr pozycyjny, gadatliwy który jest PRAWDA domyślnie. Jeśli zmienimy jego wartość na FAŁSZ, Tylko nazwy plików zostaną zgłoszone na wyjściu, bez żadnych dodatkowych informacji.

Metoda akceptuje również opcjonalny parametr nazwany, członkowie. Jeśli jest używany, podany argument musi być podzbiorem listy Tarinfo obiekty zwracane przez Getmembers metoda. Tylko informacje o określonych plikach zostaną wyświetlone, jeśli ten parametr jest używany i podano prawidłową wartość.

Wyodrębnienie wszystkich członków z archiwum smoły

Kolejną bardzo powszechną operacją, którą możemy chcieć wykonać w archiwum TAR, jest wyodrębnienie całej jego treści. Aby wykonać taką operację, możemy użyć Wypakuj wszystkometoda odpowiadających Tarfile obiekt. Oto, co byśmy napisali:

>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.Wypakuj wszystko() 
Kopiuj

Pierwszy parametr zaakceptowany metodą jest ścieżka: używał do określenia, gdzie należy wyodrębnić członków archiwum. Wartość domyślna to '.', Tak więc członkowie są wyodrębnione w bieżącym katalogu roboczym.

Drugi parametr, członkowie, może być użyte do określenia podzbioru członków do wyodrębnienia z archiwum i, jak w przypadku lista metoda, powinna to być podzbiór listy zwróconej przez Getmembers metoda.

Wypakuj wszystko Metoda ma również nazwany parametr, numeric_owner. To jest FAŁSZ Domyślnie: jeśli zmienimy to na PRAWDA, numeryczne UID I kołowacizna zostanie użyty do ustawienia własności wyodrębnionych plików zamiast nazw użytkownika i grup.

Wyodrębnienie tylko jednego członka z archiwum

Co jeśli chcemy wyodrębnić tylko jeden plik z archiwum? W takim przypadku chcemy użyć wyciąg Metoda i odniesienie pliku, który powinien być wyodrębniony przez ITS nazwa (Lub jako Tarfile obiekt). Na przykład, aby wyodrębnić tylko plik 1.tekst Plik z Tarball, uruchomimy:

>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... archiwum.wyodrębnia („File1.tekst') 
Kopiuj

Łatwe, prawda?? Plik jest domyślnie wyodrębniony w bieżącym katalogu roboczym, ale inną pozycję można określić przy użyciu drugiego parametru zaakceptowanego metodą: ścieżka.

Zwykle atrybuty, które plik ma wewnątrz archiwum, są ustawione po wyodrębnianiu systemu plików; Aby uniknąć tego zachowania, możemy ustawić trzeci parametr funkcji, set_attrs, Do FAŁSZ.

Metoda akceptuje również numeric_owner parametr: użycie jest takie samo, jak widzieliśmy w kontekście Wypakuj wszystko metoda.

Wyodrębnienie członka archiwum jako obiektu podobnego do pliku

Widzieliśmy, jak, używając Wypakuj wszystko I wyciąg Metody możemy wyodrębnić jeden lub wiele członków archiwum TAR do systemu plików. Tarfile Moduł zapewnia kolejną metodę ekstrakcji: Wypakuj plik. Po zastosowaniu tej metody określony plik nie jest wyodrębniony do systemu plików; Zamiast tego zwracany jest obiekt podobny do pliku tylko do odczytu:

>>> Z Tarfile.Otwórz archiwum.smoła.gz ', „r”) jako archiwum: ... fileobj = archiwum.wyodrębnij plik („plik 1.tekst') ... FileOBJ.Wisły () ... FileOBJ.Czytać() ... FAŁSZ B'HELLO \ NWORLD \ N ' 
Kopiuj

Dodawanie plików do archiwum

Do tej pory widzieliśmy, jak uzyskać informacje o archiwum i jego członkach oraz o różnych metodach, których możemy użyć do wyodrębnienia jego treści; Teraz nadszedł czas, aby zobaczyć, jak możemy dodać nowych członków.

Najłatwiejszym sposobem, w jaki możemy użyć do dodania pliku do archiwum, jest użycie dodać metoda. Odwołujemy się do pliku, który ma być zawarty w archiwum przez nazwa, który jest pierwszym parametrem zaakceptowanym metodą. Plik zostanie zarchiwizowany o swoją oryginalną nazwę, chyba że określamy alternatywną przy użyciu drugiego parametru pozycji: ArcName. Załóżmy, że chcemy dodać plik 1.tekst do nowego archiwum, ale chcemy go przechowywać jako Archivive_file1.tekst; Napisalibyśmy:

>>> Z Tarfile.Open („New_archive.smoła.gz ', „w”) jako archiwum: ... archiwum.Dodaj („File1.txt ', „Archived_file1.tekst') ... archiwum.lista() ... -RW-R-R-EGDOC/EGDOC 12 2020-05-16 17:49:44 Archivived_File1.tekst 
Kopiuj

W powyższym przykładzie stworzyliśmy nowe nieskompresowane archiwum za pomocą „W” tryb i dodano plik 1.tekst Jak Archive_file1.tekst, Jak widać, wyjście lista().

Katalogi można archiwizować w ten sam sposób: domyślnie są dodawane rekurencyjnie, więc wraz z ich treścią. To zachowanie można zmienić, ustawiając trzeci parametr pozycji zaakceptowany przez dodać metoda, rekurencyjny, Do FAŁSZ.

Co jeśli chcemy zastosować filtr, aby tylko określone pliki były zawarte w archiwum? W tym celu możemy użyć opcjonalnie filtr nazwany parametr. Wartość przekazana do tego parametru musi być funkcją, która zajmuje Tarinfo obiekt jako argument i zwraca wspomniany obiekt, jeśli musi być zawarty w archiwum, lub Nic Jeśli musi zostać wykluczony. Zobaczmy przykład. Załóżmy, że mamy trzy pliki w naszym bieżącym katalogu roboczym: plik 1.tekst, plik2.tekst I plik 1.MD. Chcemy dodać tylko pliki z .tekst rozszerzenie archiwum; Oto, co moglibyśmy napisać:

>>> Importuj OS >>> Importuj Tarfile >>> Z Tarfile.Open („New_archive.smoła.gz ', „w”) jako archiwum: ... bo w OS.Listdir (): ... archiwum.Dodaj (i, filtr = Lambda X: x If x.nazwa.koniec ('.txt ') else brak) ... archiwum.lista() ... -RW-R-R-EGDOC/EGDOC 0 2020-05-16 18:26:20 File2.TXT -RW-R-R-- EGDOC/EGDOC 0 2020-05-16 18:22:13 Plik 1.tekst 
Kopiuj

W powyższym przykładzie użyliśmy OS.Listdir metoda uzyskania listy plików zawartych w bieżącym katalogu roboczym. Iterując wspomnianą listę, użyliśmy dodać metoda dodania każdego pliku do archiwum. Przeszliśmy funkcję jako argument filtr parametr, w tym przypadku anonimowy, a lambda. Funkcja przyjmuje obiekt Tarfile jako argument (x) i zwraca go, jeśli jego nazwa (nazwa jest jedną z właściwości Tarinfo obiekt) kończy się „.tekst". Jeśli tak nie jest, funkcja zwraca Nic Więc plik nie jest zarchiwizowany.

Obiekt Tarinfo

Nauczyliśmy się już, że Tarinfo Obiekty reprezentują członek archiwum TAR: przechowuje atrybuty pliku odwołanego i zawiera niektóre metody, które mogą pomóc nam zidentyfikować sam typ pliku. Tarinfo Obiekt nie zawiera rzeczywistych danych pliku. Niektóre atrybuty Tarinfo Obiekt to:

  • Nazwa (nazwa pliku)
  • rozmiar (rozmiar pliku)
  • MTime (czas modyfikacji pliku)
  • UID (identyfikator użytkownika właściciela pliku)
  • GID (identyfikator grupy plików)
  • niezamazja (nazwa użytkownika właściciela pliku)
  • gname (nazwa grupy plików)

Obiekt ma również kilka bardzo przydatnych metod, oto niektóre z nich:

  • ISFILE () - Zwraca true, jeśli plik jest zwykłym plik, Fałsz w przeciwnym razie
  • isdir () - Zwraca true, jeśli plik jest katalogiem, False inaczej
  • ISSYM () - Zwraca true, jeśli plik jest łącznikiem symbolicznym, w przeciwnym razie Fałsz w przeciwnym razie
  • isblk () - Zwraca true, jeśli plik jest urządzeniem blokowym, w przeciwnym razie Fałsz w przeciwnym razie

Wnioski

W tym samouczku nauczyliśmy się podstawowego użycia Tarfile Moduł Pythona i widzieliśmy, jak możemy go użyć do pracy z archiwami smoły. Widzieliśmy różne tryby pracy, co Tarfile I Tarinfo Klasy reprezentują, a niektóre z najczęściej używanych metod do wymienienia zawartości archiwum, dodawania nowych plików lub ich wyodrębnienia. Dla bardziej dogłębnej wiedzy o Tarfile Moduł, przyjrzyj się oficjalnej dokumentacji modułu

Powiązane samouczki Linux:

  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Mastering Bash Script Loops
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Zagnieżdżone pętle w skryptach Bash
  • Ubuntu 22.04 Kopia zapasowa i przywracanie systemu
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Jak tworzyć przyrostowe i różnicowe kopie zapasowe z TAR
  • Jak tworzyć i wyodrębnić archiwa CPIO na przykładach Linux
  • Wprowadzenie do kopii zapasowej Borg