logo

Moduł Shutil w Pythonie

W tym samouczku poznamy moduł Shutil w Pythonie. Omówimy, w jaki sposób możemy wykonać operacje na plikach wysokiego poziomu, takie jak utworzenie nowej kopii pliku i zarchiwizowanie go oraz skopiowanie zawartości jednego pliku do innego pliku za pomocą skryptu Python. Przyjrzyjmy się podstawowemu modułowi Shutil.

Moduł Shutil w Pythonie

Moduł Pythona Shutil zapewnia możliwość wykonywania operacji na plikach wysokiego poziomu. Może współpracować z obiektem plikowym i oferuje nam możliwość kopiowania i usuwania plików. Obsługuje semantykę niskiego poziomu, taką jak tworzenie i zamykanie obiektów plików po wykonaniu wszystkich operacji.

Działanie modułu Shutil

Moduł Shutil Pythona zawiera wiele wbudowanych metod. Przeanalizujemy kilka ważnych metod. Aby rozpocząć pracę z tym modułem, musimy najpierw zaimportować go do naszego aktualnego pliku Pythona.

czyszczenie pamięci podręcznej npm

Kopiuj pliki

Moduł ten zapewnia Kopiuj() funkcja służąca do kopiowania danych z jednego pliku do drugiego. Pliki muszą znajdować się w tym samym katalogu, a plik docelowy musi umożliwiać zapis. Rozumiemy następującą składnię.

Składnia-

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parametr:

W powyższej składni -

  • Pierwszym argumentem jest źródło, które wskazuje ścieżkę pliku źródłowego.
  • Drugim argumentem jest miejsce docelowe, które pokazuje ścieżkę do pliku docelowego.
  • Trzeci argument jest opcjonalny; domyślna wartość tego parametru to true.
  • Zwraca ciąg znaków pokazujący ścieżkę nowo utworzonego pliku.

Rozumiemy następujący przykład.

Przykład -

 import os import shutil # Creating a new folder in the current directory os.mkdir('javatpoint') # It will show the empty folder print('Empty Folder:', os.listdir('javatpoint')) # testcompare.py file will be copied in the javatpoint folder shutil.copy('testcompare.py', 'javatpoint') # After coping the file folder shows the file print('File Copied Name:', os.listdir('javatpoint')) 

Wyjście:

 Empty Folder: [] File Copied Name: ['testcompare.py'] 

Wyjaśnienie -

Funkcja copy() przyjmuje jako argument nazwę katalogu. Tutaj metadane nie zostanie skopiowany, skopiowany plik zostanie uznany za plik świeżo utworzony. Ta metoda sklonowała również wszystkie uprawnienia do pliku. Należy pamiętać, że jeśli plik docelowy już istnieje, zostanie zastąpiony plikiem źródłowym.

Zobaczmy inny przykład.

Przykład - 2, jeśli miejscem docelowym jest katalog

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest = shutil.copy(source, destination) # Print the new path print(dest) 

Wyjście:

 D:Python ProjectNewFilehello.txt 

Jak już wspomnieliśmy, funkcja copy() nie kopiuje metadanych. Ale będziemy używać kopia2() funkcja, która pozwala nam skopiować plik wraz z metadanymi.

Przykład - 3: Obsługa błędów podczas korzystania z metody kopiowania

 # importing shutil module import shutil # It is a source path source = r'D:Python ProjectNewFolder' # It is a destination path destination = r'D:Python ProjectNewFolder' try: shutil.copy(source, destination) print('File copied successfully.') # If the given source and path are same except shutil.SameFileError: print('Source and destination represents the same file.') # If there is no permission to write except PermissionError: print('Permission denied.') # For other errors except: print('Error occurred while copying file.') 

Wyjście:

 Source and destination represents the same file. 

Funkcja copy2().

Funkcja ta jest podobna do Kopiuj() funkcjonować. Może także kopiować zawartość jednego pliku do drugiego, ale jedyną różnicą jest to, że może zachować metadane pliku. Rozumiemy następującą składnię.

Składnia:

 shutil.copy2(source, destination, *, follow_symlinks = True) 

Parametr:

W powyższej składni -

  • Pierwszym argumentem jest źródło, które wskazuje ścieżkę pliku źródłowego.
  • Drugim argumentem jest miejsce docelowe, które pokazuje ścieżkę do pliku docelowego.
  • Trzeci argument jest opcjonalny; domyślna wartość tego parametru to true.
  • Zwraca ciąg znaków pokazujący ścieżkę nowo utworzonego pliku.

Rozumiemy następujący przykład.

Przykład -

 import os import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' metadata = os.stat(source) print(metadata) # In the newly created foloder destination = r'D:Python ProjectNewFile' # Storing the new path of hello.txt file dest1 = shutil.copy2(source, destination) metadata = os.stat(dest1) print('After copying file') print(metadata) # Print the new path print(dest1) 

Wyjście:

 os.stat_result(st_mode=33206, st_ino=562949953459285, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815671, st_mtime=1622705607, st_ctime=1622705607) After copying file os.stat_result(st_mode=33206, st_ino=562949953459287, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815748, st_mtime=1622705607, st_ctime=1622706243) D:Python ProjectNewFilehello.txt 

Funkcja Shutil.copyfile().

Ta metoda służy do kopiowania zawartości pliku źródłowego do pliku docelowego z oczekiwaniem na metadane. Źródło i miejsce docelowe muszą mieć plik, a plik docelowy musi zapewniać uprawnienia do zapisu. Jeśli istnieje już plik docelowy, zostanie on zastąpiony nowym plikiem, w przeciwnym razie utwórz nowy plik.

Zobaczmy następującą składnię.

Składnia:

 shutil.copyfile(source, destination, *, follow_symlinks = True) 

Parametry:

W powyższej składni -

  • Pierwszym argumentem jest źródło, które wskazuje ścieżkę pliku źródłowego.
  • Drugim argumentem jest miejsce docelowe, które pokazuje ścieżkę do pliku docelowego.
  • Trzeci argument jest opcjonalny; domyślna wartość tego parametru to true.
  • Zwraca ciąg znaków pokazujący ścieżkę nowo utworzonego pliku.

Rozumiemy następujący przykład.

Przykład -

 import shutil # hello.txt file will be copied source = r'D:Python Projectjavatpointhello.txt' # In the newly created foloder destination = r'D:Python ProjectNewFilehi.txt' # Storing the new path of hello.txt file dest1 = shutil.copyfile(source, destination) # Print the new path print(dest1) 

Wyjście:

 D:Python ProjectNewFilehi.txt 

Funkcja Shutil.copytree().

Ta metoda służy do replikowania całego katalogu. Kopiuje całe drzewo katalogów zakorzenione w źródle do katalogu docelowego. Katalog docelowy nie może już istnieć. Zobaczmy następującą składnię.

Składnia:

 shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False) 

Parametry:

W powyższej składni:

    źródło -Pokazuje ścieżkę katalogu źródłowego.ręka -Pokazuje ścieżkę do katalogu docelowego.dowiązania symboliczne (opcjonalnie) -Przyjmuje wartości logiczne – True i False. Zależy to od tego, które metadane oryginalnych linków lub linków zostaną skopiowane do nowego drzewa.ignorować (opcjonalnie) -Domyślnie jest to Brak, ale jeśli ignorowanie zostanie przekazane, musi to być funkcja wywoływalna, która otrzyma jako argumenty. Katalog jest odwiedzany przez copytree().funkcja_kopii(opcjonalnie) -Kopia2 jest wartością domyślną tego parametru. The Kopiuj() Funkcja może być używana jako parametr.ignorowanie_dangling_symlinks (opcjonalnie) -Ten parametr służy do zgłoszenia wyjątku, jeśli plik wskazany przez dowiązanie symboliczne nie istnieje.
  • Zwraca ciąg znaków reprezentujący ścieżkę nowo utworzonego katalogu.

Przykład -

 # importing shutil module import shutil # It is source path src = r'D:Python Projectjavatpoint' # It is destination path dest = r'D:Python ProjectNewFolder' # Copy the content of # source to destination dest1 = shutil.copytree(src, dest) # Now we print path of newly # created file print('Destination path:', dest1) 

Wyjście:

 Destination path: D:Python ProjectNewFolder 

Drzewo Shutil.rmtree()

Ta metoda służy do usuwania całego drzewa katalogów. Zobaczmy następującą składnię.

Składnia:

 shutil.rmtree(path, ignore_errors=False, onerror=None) 

Parametr-

W powyższej składni -

    ścieżka -Reprezentuje ścieżkę pliku. Obiekt podobny do ścieżki jest obiektem typu string lub bytes.ignorować_błędy -Usunięcie zostanie zignorowane, jeśli ten argument ma wartość True.onerror -Jeśli ignorować_błędy ma wartość false, takie błędy są obsługiwane przez wywołanie procedury obsługi określonej przez onerror.

Rozumiemy następujący przykład -

Przykład -

 import shutil import os # location location_dir = r'D:Python ProjectNewFile' # directory directory = r'D:Python Projectjavatpoint' # path path1 = os.path.join(location_dir, directory) # removing directory shutil.rmtree(path1) 

Powyższy kod usunie podany katalog.

Funkcja Shutil. Which().

The zamknięcie.które() Funkcja służy do pobrania ścieżki do aplikacji wykonywalnej, która zostałaby uruchomiona, gdyby wywołano podane polecenie cmd. Znajduje plik w podanej ścieżce. Zobaczmy następującą składnię.

Składnia:

 shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None) 

Parametry

W powyższej składni -

    cmd -Jest to ciąg reprezentujący plik.tryb -Określa tryb pliku, w którym powinna zostać wykonana metoda.ścieżka -Ten parametr określa ścieżkę, która ma zostać użyta.
  • Ta metoda zwraca ścieżkę do aplikacji wykonywalnej.

Rozumiemy następujący przykład.

Przykład -

metoda podciągu Java
 # importing shutil module import shutil # search the file cmd = 'python' # Using shutil.which() method locating = shutil.which(cmd) # Print result print(locating) 

Wyjście:

 C:Pythonpython.EXE 

Znajdzie podany plik na komputerze, jeśli plik zostanie znaleziony, zwróci ścieżkę do pliku, w przeciwnym razie zwróci Brak.