V tej vadnici bomo spoznali modul Shutil v Pythonu. Razpravljali bomo o tem, kako lahko izvedemo operacijo datoteke na visoki ravni, kot je ustvarjanje nove kopije datoteke in njeno arhiviranje ter kopiranje vsebine iz ene datoteke v drugo s pomočjo skripta Python. Oglejmo si osnovno predstavitev modula Shutil.
Modul Python Shutil
Modul shutil Python nudi možnost izvajanja operacije datotek na visoki ravni. Lahko deluje z datotečnim predmetom in nam ponuja možnost kopiranja in odstranjevanja datotek. Obravnava semantiko nizke ravni, kot je ustvarjanje in zapiranje datotečnih objektov po izvedbi vseh operacij.
Delovanje modula Shutil
Modul Python shutil ima številne vgrajene metode. Raziskali bomo nekaj pomembnih metod. Za začetek dela s tem modulom ga moramo najprej uvoziti v trenutno datoteko Python.
Kopiraj datoteke
Ta modul zagotavlja kopirati() funkcija, ki se uporablja za kopiranje podatkov iz ene datoteke v drugo. Datoteke morajo biti v istem imeniku in ciljna datoteka mora biti zapisljiva. Razumejmo naslednjo sintakso.
sintaksa-
shutil.copyfile(source, destination, *, follow_symlinks = True)
Parameter:
V zgornji sintaksi -
- Prvi argument je vir, ki prikazuje pot izvorne datoteke.
- Drugi argument je destinacija, ki prikazuje pot do ciljne datoteke.
- Tretji argument je neobvezen; privzeta vrednost tega parametra je true.
- Vrne niz, ki prikazuje pot do novo ustvarjene datoteke.
Razumejmo naslednji primer.
Primer -
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'))
Izhod:
Empty Folder: [] File Copied Name: ['testcompare.py']
Pojasnilo -
Funkcija copy() vzame ime imenika kot argument. Tukaj je metapodatki ni kopirana, bo kopirana datoteka obravnavana kot sveže ustvarjena datoteka. Ta metoda je tudi klonirala vsa dovoljenja za datoteko. Upoštevati je treba, da če ciljna datoteka že obstaja, bo zamenjana z izvorno datoteko.
Poglejmo še en primer.
Primer - 2, če je cilj imenik
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)
Izhod:
D:Python ProjectNewFilehello.txt
Kot smo že omenili, funkcija copy() ne kopira metapodatkov. Vendar bomo uporabili kopija2() funkcijo, ki nam omogoča kopiranje datoteke, vključno z njenimi metapodatki.
Primer - 3: Obravnava napake med uporabo metode kopiranja
# 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.')
Izhod:
Source and destination represents the same file.
Funkcija copy2().
Ta funkcija je podobna kopirati() funkcijo. Prav tako lahko kopira vsebino ene datoteke v drugo, vendar je edina razlika v tem, da lahko ohrani metapodatke datoteke. Razumejmo naslednjo sintakso.
Sintaksa:
shutil.copy2(source, destination, *, follow_symlinks = True)
Parameter:
najlepši nasmeh na svetu
V zgornji sintaksi -
- Prvi argument je vir, ki prikazuje pot izvorne datoteke.
- Drugi argument je destinacija, ki prikazuje pot do ciljne datoteke.
- Tretji argument je neobvezen; privzeta vrednost tega parametra je true.
- Vrne niz, ki prikazuje pot do novo ustvarjene datoteke.
Razumejmo naslednji primer.
Primer -
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)
Izhod:
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
Funkcija shutil.copyfile().
Ta metoda se uporablja za kopiranje vsebine izvorne datoteke v ciljno datoteko z pričakovanjem metapodatkov. Izvor in cilj morata imeti datoteko, ciljna datoteka pa mora imeti dovoljenje za pisanje. Če je ciljna datoteka že prisotna, bo zamenjana z novo datoteko, sicer ustvarite novo datoteko.
Poglejmo naslednjo sintakso.
Sintaksa:
shutil.copyfile(source, destination, *, follow_symlinks = True)
Parametri:
V zgornji sintaksi -
- Prvi argument je vir, ki prikazuje pot izvorne datoteke.
- Drugi argument je destinacija, ki prikazuje pot do ciljne datoteke.
- Tretji argument je neobvezen; privzeta vrednost tega parametra je true.
- Vrne niz, ki prikazuje pot do novo ustvarjene datoteke.
Razumejmo naslednji primer.
Primer -
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)
Izhod:
D:Python ProjectNewFilehi.txt
Funkcija shutil.copytree().
Ta metoda se uporablja za podvajanje celotnega imenika. Kopira celotno drevo imenikov, ukoreninjeno pri izvoru, v ciljni imenik. Ciljni imenik ne sme biti že prisoten. Poglejmo naslednjo sintakso.
Sintaksa:
shutil.copytree(src, dst, symlinks = False, ignore = None, copy_function = copy2, igonre_dangling_symlinks = False)
Parametri:
V zgornji sintaksi:
- Vrne niz, ki predstavlja pot do novo ustvarjenega imenika.
Primer -
# 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)
Izhod:
Destination path: D:Python ProjectNewFolder
shutil.rmtree()
Ta metoda se uporablja za brisanje celotnega drevesa imenikov. Poglejmo naslednjo sintakso.
Sintaksa:
shutil.rmtree(path, ignore_errors=False, onerror=None)
Parameter-
V zgornji sintaksi -
Razumejmo naslednji primer -
Primer -
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)
Zgornja koda bo odstranila dani imenik.
Funkcija shutil.which().
The shutil.which() funkcija se uporablja za pridobitev poti do izvedljive aplikacije, ki bi se zagnala, če bi poklicali dani cmd. Najde datoteko na dani poti. Poglejmo naslednjo sintakso.
Sintaksa:
shutil.which(cmd, mode = os.F_OK | os.X_OK, path = None)
Parametri
V zgornji sintaksi -
- Ta metoda vrne pot do izvedljive aplikacije.
Razumejmo naslednji primer.
Primer -
# importing shutil module import shutil # search the file cmd = 'python' # Using shutil.which() method locating = shutil.which(cmd) # Print result print(locating)
Izhod:
C:Pythonpython.EXE
Našel bo dano datoteko v računalniku; če jo najde, vrne pot do datoteke, sicer vrne None.