Comment supprimer un fichier ou un dossier en Python?
python
file-io
directory
delete-file
Zygimantas
la source
la source
os.remove()
lève une exception, il peut donc être nécessaire de vérifier d'os.path.isfile()
abord, ou d'envelopper untry
.os.remove()
si un fichier n'existe pas estFileNotFoundError
.os.remove()
plusieurs arguments pour supprimer plusieurs fichiers, ou appelez-vous chaque fois pour chaque fichier?Syntaxe Python pour supprimer un fichier
Ou
Ou
Bibliothèque pathlib pour Python version> 3.5
Path.unlink (missing_ok = False)
Dissocier la méthode utilisée pour supprimer le fichier ou le lien symbolik.
Meilleur entrainement
a.
os.path.isfile("/path/to/file")
b. Utilisation
exception handling.
EXEMPLE pour
os.path.isfile
Gestion des exceptions
SORTIE RESPECTIVE
Syntaxe Python pour supprimer un dossier
Exemple pour
shutil.rmtree()
la source
Utilisation
(Voir documentation complète sur shutil ) et / ou
et
(Documentation complète sur os .)
la source
Voici une fonction robuste qui utilise à la fois
os.remove
etshutil.rmtree
:la source
remove(path);
appel ISO C.os.path.islink(file_path):
un bug, devrait êtreos.path.islink(path):
Vous pouvez utiliser le haut-
pathlib
module (nécessite Python 3.4+, mais il y a des rétroportages pour les versions plus anciennes sur PyPI:pathlib
,pathlib2
).Pour supprimer un fichier, il existe la
unlink
méthode:Ou la
rmdir
méthode pour supprimer un dossier vide :la source
pathlib
qui puisse gérer la suppression de répertoires non vides. Cependant, vous pouvez utilisershutil.rmtree
. Il a été mentionné dans plusieurs autres réponses, donc je ne l'ai pas inclus.Pour Python 3, pour supprimer le fichier et le répertoire individuellement, utilisez respectivement les méthodes
unlink
et object:rmdir
Path
Notez que vous pouvez également utiliser des chemins relatifs avec des
Path
objets et vous pouvez vérifier votre répertoire de travail actuel avecPath.cwd
.Pour supprimer des fichiers et répertoires individuels dans Python 2, consultez la section ainsi étiquetée ci-dessous.
Pour supprimer un répertoire contenant du contenu, utilisez
shutil.rmtree
et notez qu'il est disponible en Python 2 et 3:Manifestation
Nouveau dans Python 3.4 est l'
Path
objet.Utilisons-en un pour créer un répertoire et un fichier pour en démontrer l'utilisation. Notez que nous utilisons le
/
pour joindre les parties du chemin, cela contourne les problèmes entre les systèmes d'exploitation et les problèmes liés à l'utilisation de barres obliques inverses sous Windows (où vous devez soit doubler vos barres obliques inversées,\\
soit utiliser des chaînes brutes, commer"foo\bar"
):et maintenant:
Supprimons-les maintenant. D'abord le fichier:
Nous pouvons utiliser le globbing pour supprimer plusieurs fichiers - créons d'abord quelques fichiers pour cela:
Ensuite, parcourez simplement le motif glob:
Maintenant, démontrant la suppression du répertoire:
Et si nous voulons supprimer un répertoire et tout ce qu'il contient? Pour ce cas d'utilisation, utilisez
shutil.rmtree
Recréons notre répertoire et notre fichier:
et notez que cela
rmdir
échoue à moins qu'il ne soit vide, c'est pourquoi rmtree est si pratique:Maintenant, importez rmtree et passez le répertoire à la fonction:
et nous pouvons voir que le tout a été supprimé:
Python 2
Si vous êtes sur Python 2, il y a un backport du module pathlib appelé pathlib2 , qui peut être installé avec pip:
Et puis vous pouvez alias la bibliothèque pour
pathlib
Ou importez simplement directement l'
Path
objet (comme illustré ici):Si c'est trop, vous pouvez supprimer des fichiers avec
os.remove
ouos.unlink
ou
et vous pouvez supprimer des répertoires avec
os.rmdir
:Notez qu'il existe également un
os.removedirs
- il supprime uniquement les répertoires vides de manière récursive, mais il peut convenir à votre cas d'utilisation.la source
rmtree(directory_path)
fonctionne en python 3.6.6 mais pas en python 3.5.2 - vous en avez besoinrmtree(str(directory_path)))
.la source
shutil.rmtree est la fonction asynchrone, donc si vous voulez vérifier quand elle est terminée, vous pouvez utiliser while ... loop
la source
shutil.rmtree
n'est pas censé être asynchrone. Cependant, il peut sembler être sur Windows avec des analyseurs de virus interférant.Pour supprimer des fichiers:
ou
Les deux fonctions sont sémantiquement identiques. Cette fonction supprime (supprime) le chemin du fichier. Si le chemin n'est pas un fichier et qu'il s'agit d'un répertoire, une exception est déclenchée.
Pour supprimer des dossiers:
ou
Afin de supprimer des arborescences de répertoires entières,
shutil.rmtree()
peut être utilisé.os.rmdir
ne fonctionne que lorsque le répertoire est vide et existe.Pour supprimer les dossiers récursivement vers le parent:
Il supprime chaque répertoire parent vide avec self jusqu'à ce que le parent ait du contenu
Pour plus d' informations check doc officiel:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
la source
Pour supprimer tous les fichiers du dossier
Pour supprimer tous les dossiers d'un répertoire
la source
Pour éviter le problème TOCTOU mis en évidence par le commentaire d'Éric Araujo , vous pouvez intercepter une exception pour appeler la bonne méthode:
Depuis
shutil.rmtree()
ne supprimera que les répertoires et /os.remove()
ouos.unlink()
supprimera uniquement les fichiers.la source
shutil.rmtree()
supprime non seulement le répertoire mais aussi son contenu.Je recommande d'utiliser
subprocess
si l'écriture d'un code beau et lisible est votre tasse de thé:Et si vous n'êtes pas ingénieur logiciel, envisagez peut-être d'utiliser Jupyter; vous pouvez simplement taper les commandes bash:
Traditionnellement, vous utilisez
shutil
:la source
subprocess
cela.shutil.rmtree
Est-ce que l'rm -r
emploi de très bien, avec l'avantage supplémentaire de travailler sur Windows.