logo

Shutil Module v Pythonu

V tomto tutoriálu se seznámíme s modulem Shutil v Pythonu. Probereme, jak můžeme provádět operace se soubory na vysoké úrovni, jako je vytvoření nového kopírovacího souboru a jeho archivace a kopírování obsahu z jednoho souboru do druhého pomocí skriptu Python. Pojďme si základní představení modulu Shutil.

Modul Python Shutil

Modul Shutil v Pythonu poskytuje možnost provádět operace se soubory na vysoké úrovni. Může pracovat s objektem souboru a nabízí nám možnost kopírovat a odstraňovat soubory. Zvládá nízkoúrovňovou sémantiku, jako je vytváření a zavírání objektů souborů po provedení všech operací.

Fungování modulu Shutil

Modul Shutil v Pythonu je dodáván s mnoha vestavěnými metodami. Prozkoumáme několik důležitých metod. Abychom mohli začít pracovat s tímto modulem, musíme jej nejprve importovat do našeho aktuálního souboru Python.

Kopírovat soubory

Tento modul poskytuje kopírovat() funkce, která se používá ke kopírování dat z jednoho souboru do druhého. Soubory musí být ve stejném adresáři a cílový soubor musí být zapisovatelný. Pojďme pochopit následující syntaxi.

Syntax-

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

Parametr:

Ve výše uvedené syntaxi -

  • První argument je source, který ukazuje cestu ke zdrojovému souboru.
  • Druhý argument je destination, který ukazuje cestu k cílovému souboru.
  • Třetí argument je volitelný; výchozí hodnota tohoto parametru je true.
  • Vrací řetězec, který ukazuje cestu k nově vytvořenému souboru.

Pojďme pochopit následující příklad.

Příklad -

 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')) 

Výstup:

struktura v datové struktuře
 Empty Folder: [] File Copied Name: ['testcompare.py'] 

Vysvětlení -

Funkce copy() bere jako argument název adresáře. Zde je metadata není zkopírován, bude zkopírovaný soubor považován za čerstvě vytvořený soubor. Tato metoda také naklonovala všechna oprávnění souboru. Jedna věc, kterou je třeba poznamenat, je, že pokud cílový soubor již existuje, bude nahrazen zdrojovým souborem.

co je dvojitá java

Podívejme se na další příklad.

Příklad - 2, pokud je cílem adresář

 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) 

Výstup:

 D:Python ProjectNewFilehello.txt 

Jak jsme zmínili, funkce copy() nekopíruje metadata. My však použijeme kopie2() funkce, která nám umožňuje zkopírovat soubor včetně jeho metadat.

Příklad - 3: Ošetření chyb při použití metody kopírování

 # 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.') 

Výstup:

 Source and destination represents the same file. 

Funkce copy2().

Tato funkce je podobná funkci kopírovat() funkce. Může také kopírovat obsah jednoho souboru do druhého, ale jediným rozdílem je, že může zachovat metadata souboru. Pojďme pochopit následující syntaxi.

Syntax:

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

Parametr:

Ve výše uvedené syntaxi -

  • První argument je source, který ukazuje cestu ke zdrojovému souboru.
  • Druhý argument je destination, který ukazuje cestu k cílovému souboru.
  • Třetí argument je volitelný; výchozí hodnota tohoto parametru je true.
  • Vrací řetězec, který ukazuje cestu k nově vytvořenému souboru.

Pojďme pochopit následující příklad.

Příklad -

java řetězec do pole
 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) 

Výstup:

 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 

Funkce Shutil.copyfile().

Tato metoda se používá ke zkopírování obsahu zdrojového souboru do cílového souboru očekávejte metadata. Zdroj a cíl musí mít soubor a cílový soubor musí poskytovat oprávnění k zápisu. Pokud již existuje cílový soubor, bude nahrazen novým souborem, jinak vytvořte nový soubor.

Podívejme se na následující syntaxi.

Syntax:

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

Parametry:

Ve výše uvedené syntaxi -

  • První argument je source, který ukazuje cestu ke zdrojovému souboru.
  • Druhý argument je destination, který ukazuje cestu k cílovému souboru.
  • Třetí argument je volitelný; výchozí hodnota tohoto parametru je true.
  • Vrací řetězec, který ukazuje cestu k nově vytvořenému souboru.

Pojďme pochopit následující příklad.

Příklad -

 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) 

Výstup:

 D:Python ProjectNewFilehi.txt 

Funkce Shutil.copytree().

Tato metoda se používá k replikaci celého adresáře. Zkopíruje celý strom adresářů zakořeněný u zdroje do cílového adresáře. Cílový adresář již nesmí existovat. Podívejme se na následující syntaxi.

Syntax:

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

Parametry:

Ve výše uvedené syntaxi:

    src -Ukazuje cestu ke zdrojovému adresáři.ruka -Ukazuje cestu k cílovému adresáři.symbolické odkazy (volitelné) -Přebírá booleovské hodnoty – True a False. Záleží na tom, která metadata původních odkazů nebo odkazů budou zkopírována do nového stromu.ignorovat (volitelné) -Ve výchozím nastavení je None, ale pokud je ignorování předáno, musí to být callable, které obdrží jako své argumenty. Adresář navštíví copytree().funkce kopírování (volitelné) -Výchozí hodnotou tohoto parametru je kopie2. The kopírovat() funkci lze použít jako parametr.ignore_dangling_symlinks(volitelné) -Tento parametr se používá k vyvolání výjimky, pokud soubor, na který odkazuje symbolický odkaz, neexistuje.
  • Vrací řetězec, který představuje cestu k nově vytvořenému adresáři.

Příklad -

 # 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) 

Výstup:

 Destination path: D:Python ProjectNewFolder 

Shutil.rmtree()

Tato metoda se používá k odstranění celého stromu adresářů. Podívejme se na následující syntaxi.

Syntax:

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

Parametr-

c struktura ve struktuře

Ve výše uvedené syntaxi -

    cesta -Představuje cestu k souboru. Objekt podobný cestě je buď objekt typu řetězec nebo bajty.ignore_errors -Pokud má tento argument hodnotu True, bude odstranění ignorováno.onerror -Li ignore_errors je false, jsou takové chyby zpracovány voláním obslužné rutiny určené onerror.

Pojďme pochopit následující příklad -

Příklad -

 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) 

Výše uvedený kód odstraní daný adresář.

Funkce Shutil.which().

The Shutil.which() Funkce se používá k získání cesty ke spustitelné aplikaci, která by byla spuštěna, kdyby byl zavolán daný cmd. Najde soubor v zadané cestě. Podívejme se na následující syntaxi.

Syntax:

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

Parametry

Ve výše uvedené syntaxi -

    cmd -Je to řetězec, který představuje soubor.režim -Určuje režim souboru, ve kterém se má metoda provést.cesta -Tento parametr určuje cestu, která se má použít.
  • Tato metoda vrací cestu ke spustitelné aplikaci.

Pojďme pochopit následující příklad.

Příklad -

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

Výstup:

 C:Pythonpython.EXE 

Najde daný soubor v počítači, pokud je nalezen, vrátí cestu k souboru, jinak vrátí Žádný.