Python >> Tutoriel Python >  >> Python

Comment rm -rf en Python pour supprimer un répertoire ?

Formulation du problème : Comment supprimer un répertoire en Python ?

Le rm La commande sous Linux supprime un répertoire spécifique. Vous pouvez également ajouter les options

  • -r supprimer le répertoire de manière récursive
  • -f ignorez les fichiers et les arguments inexistants et n'invitez pas l'utilisateur à demander une confirmation

Donc, si vous exécutez rm -rf my_directory , il supprimera de force my_directory et tous ses répertoires enfants.

$ rm -rf my_directory

Quelle est la meilleure façon de faire l'équivalent de rm -rf en Python ?

Méthode 1 :shutdown.rmtree()

La manière la plus Pythonique de rm -rf est d'utiliser la fonction shutil.rmtree() défini dans le shutil forfait. Il prend un argument, le dossier à supprimer, et supprime le dossier de manière récursive.

import shutil
shutil.rmtree('my_directory')

Notez que rmtree n'est pas sémantiquement identique à rm -rf car cela génère une erreur si vous essayez de supprimer un seul fichier.

Si vous souhaitez généralement supprimer les messages d'erreur, vous pouvez utiliser la commande suivante à la place :

shutil.rmtree('my_directory', ignore_errors=True)

Méthode 2 :os.unlink() et shutdown.rmtree()

La méthode suivante résout ce problème où Python génère une erreur si vous essayez de supprimer un seul fichier.

import os, shutil

def remove(path):
    if os.path.exists(path):  
        if os.path.isfile(path) or os.path.islink(path):
            os.unlink(path)
        else:
            shutil.rmtree(path)

remove('my_directory')

Comme indiqué ici, cette méthode fonctionne sur des liens symboliques vers des répertoires du répertoire à supprimer.

Méthode 3 :os.walk()

Vous pouvez également supprimer un répertoire avec tout son contenu en utilisant le os.walk() méthode qui passe en revue tous les fichiers et dossiers d'un répertoire donné.

# CAUTION: top == '/' could delete all files on your disk!
import os
my_dir = '/my_directory'
for root, dirs, files in os.walk(my_dir, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

Méthode 4 :supprimer les fichiers en lecture seule dans Windows

Vous pouvez également supprimer un répertoire dans Windows si les fichiers sont en mode lecture seule en utilisant le code suivant de la documentation Python :

import os, stat, shutil

def remove_readonly(func, path):
    os.chmod(path, stat.S_IWRITE)
    func(path)

directory = 'my_dir'
shutil.rmtree(directory, onerror=remove_readonly)

Cet exemple montre comment supprimer une arborescence de répertoires nommée 'my_dir' sous Windows où certains fichiers sont en lecture seule. La fonction est utilisée comme rappel pour effacer le bit de lecture seule et réessayer le processus de suppression. S'il y a encore une erreur, elle sera propagée au programme principal.