logo

Mòdul Shutil en Python

En aquest tutorial, coneixerem el mòdul Shutil a Python. Parlarem de com podem realitzar l'operació de fitxers d'alt nivell, com ara crear un nou fitxer de còpia i arxivar-lo i copiar el contingut d'un fitxer a un altre mitjançant l'script de Python. Fem una introducció bàsica al mòdul Shutil.

Mòdul Python Shutil

El mòdul Shuil de Python ofereix la possibilitat de realitzar l'operació de fitxers d'alt nivell. Pot funcionar amb l'objecte fitxer i ens ofereix la possibilitat de copiar i eliminar els fitxers. Gestiona la semàntica de baix nivell com la creació i el tancament d'objectes de fitxer després de realitzar totes les operacions.

Funcionament del mòdul Shutil

El mòdul Shuil de Python inclou molts mètodes integrats. Explorarem alguns mètodes importants. Per començar a treballar amb aquest mòdul, primer hem d'importar-lo al nostre fitxer Python actual.

Copiar fitxers

Aquest mòdul proporciona el copiar () funció que s'utilitza per copiar dades d'un fitxer a un altre. Els fitxers han d'estar al mateix directori i el fitxer de destinació s'ha de poder escriure. Entenem la sintaxi següent.

Sintaxi-

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

Paràmetre:

En la sintaxi anterior -

  • El primer argument és la font que mostra la ruta del fitxer font.
  • El segon argument és destinació que mostra la ruta del fitxer de destinació.
  • El tercer argument és opcional; el valor per defecte d'aquest paràmetre és cert.
  • Retorna una cadena que mostra la ruta del fitxer creat recentment.

Entenem l'exemple següent.

Exemple -

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

Sortida:

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

Explicació -

La funció copy() pren el nom del directori com a argument. Aquí el metadades no es copia, el fitxer copiat es considerarà com el fitxer acabat de crear. Aquest mètode també va clonar tots els permisos del fitxer. Una cosa a tenir en compte és que si el fitxer de destinació ja existeix, se substituirà pel fitxer font.

Vegem un altre exemple.

Exemple - 2 si una destinació és un directori

 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) 

Sortida:

 D:Python ProjectNewFilehello.txt 

Com hem esmentat això, la funció copy() no copia les metadades. Però, farem servir el còpia 2() funció que ens permet copiar el fitxer incloent les seves metadades.

Exemple - 3: Gestió d'errors en utilitzar el mètode de còpia

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

Sortida:

 Source and destination represents the same file. 

La funció copy2().

Aquesta funció és similar a la copiar () funció. També pot copiar el contingut d'un fitxer a un altre, però l'única diferència és que pot conservar les metadades del fitxer. Entenem la sintaxi següent.

Sintaxi:

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

Paràmetre:

En la sintaxi anterior -

  • El primer argument és la font que mostra la ruta del fitxer font.
  • El segon argument és destinació que mostra la ruta del fitxer de destinació.
  • El tercer argument és opcional; el valor per defecte d'aquest paràmetre és cert.
  • Retorna una cadena que mostra la ruta del fitxer creat recentment.

Entenem l'exemple següent.

Exemple -

 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) 

Sortida:

 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 

La funció shutil.copyfile().

Aquest mètode s'utilitza per copiar el contingut del fitxer d'origen al fitxer de destinació que esperen les metadades. L'origen i la destinació han de tenir un fitxer i el fitxer de destinació ha de proporcionar el permís d'escriptura. Si ja hi ha un fitxer de destinació present, se substituirà pel fitxer nou, en cas contrari, creeu un fitxer nou.

Vegem la sintaxi següent.

Sintaxi:

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

Paràmetres:

En la sintaxi anterior -

  • El primer argument és la font que mostra la ruta del fitxer font.
  • El segon argument és destinació que mostra la ruta del fitxer de destinació.
  • El tercer argument és opcional; el valor per defecte d'aquest paràmetre és cert.
  • Retorna una cadena que mostra la ruta del fitxer creat recentment.

Entenem l'exemple següent.

gigabyte vs megabyte

Exemple -

 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) 

Sortida:

 D:Python ProjectNewFilehi.txt 

La funció shutil.copytree().

Aquest mètode s'utilitza per replicar el directori complet. Copia un arbre de directoris sencer arrelat a l'origen al directori de destinació. El directori de destinació no s'ha de presentar ja. Vegem la sintaxi següent.

Sintaxi:

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

Paràmetres:

En la sintaxi anterior:

    src -Mostra la ruta del directori font.mà -Mostra la ruta del directori de destinació.enllaços simbòlics (opcional) -Pren els valors booleans: vertader i fals. Depèn de quines metadades dels enllaços o enllaços originals es copiaran al nou arbre.ignora (opcional) -Per defecte és Cap, però si es passa l'ignorar, ha de ser un cridable que rebi com a arguments. El directori és visitat per copytree().funció_copia (opcional) -La còpia2 és el valor per defecte d'aquest paràmetre. El copiar () La funció es pot utilitzar com a paràmetre.ignore_dangling_symlinks (opcional) -Aquest paràmetre s'utilitza per generar l'excepció si el fitxer apuntat per l'enllaç simbòlic no existeix.
  • Retorna la cadena que representa la ruta del directori acabat de crear.

Exemple -

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

Sortida:

 Destination path: D:Python ProjectNewFolder 

El shutil.rmtree()

Aquest mètode s'utilitza per eliminar l'arbre de directoris complet. Vegem la sintaxi següent.

Sintaxi:

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

paràmetre-

En la sintaxi anterior -

    Camí -Representa la ruta del fitxer. Un objecte semblant a un camí és un objecte de cadena o bytes.ignorar_errors -L'eliminació s'ignorarà si aquest argument és True.onerror -Si ignorar_errors és fals, aquests errors es gestionen cridant a un controlador especificat per onerror.

Entenem el següent exemple:

Exemple -

 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) 

El codi anterior eliminarà el directori donat.

La funció shutil.which().

El shutil.which() La funció s'utilitza per obtenir la ruta d'una aplicació executable que s'executaria si es cridés el cmd donat. Troba el fitxer al camí donat. Vegem la sintaxi següent.

Sintaxi:

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

Paràmetres

En la sintaxi anterior -

    cmd -És una cadena que representa el fitxer.mode -Especifica el mode de fitxer en què s'ha d'executar el mètode.Camí -Aquest paràmetre especifica el camí que s'utilitzarà.
  • Aquest mètode retorna el camí a una aplicació executable.

Entenem l'exemple següent.

Exemple -

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

Sortida:

 C:Pythonpython.EXE 

Trobarà el fitxer donat a l'ordinador, si es troba el fitxer retorna la ruta del fitxer, en cas contrari, no retorna Cap.