Supprimer un fichier ou un dossier
Comment supprimer un fichier ou un dossier en Python?
10 réponses
os.remove()
supprime un fichier.
os.rmdir()
supprime un répertoire vide.
shutil.rmtree()
supprime un répertoire et tout son contenu.
pathlib.Path.unlink()
supprime le fichier ou le lien symbolique.
pathlib.Path.rmdir()
supprime le répertoire vide.
Syntaxe Python pour supprimer un fichier
import os
os.remove("/tmp/<file_name>.txt")
Ou
import os
os.unlink("/tmp/<file_name>.txt")
Meilleures pratiques
- Tout d'abord, vérifiez si le fichier ou le dossier existe ou non, puis supprimez uniquement ce fichier. Cela peut être réalisé de deux façons:
un.os.path.isfile("/path/to/file")
B. Utiliserexception handling.
EXEMPLE pour os.path.isfile
#!/usr/bin/python
import os
myfile="/tmp/foo.txt"
## If file exists, delete it ##
if os.path.isfile(myfile):
os.remove(myfile)
else: ## Show an error ##
print("Error: %s file not found" % myfile)
Gestion Des Exceptions
#!/usr/bin/python
import os
## Get input ##
myfile= raw_input("Enter file name to delete: ")
## Try to delete the file ##
try:
os.remove(myfile)
except OSError as e: ## if failed, report it back to the user ##
print ("Error: %s - %s." % (e.filename, e.strerror))
SORTIE RESPECTIVE
Enter file name to delete : demo.txt Error: demo.txt - No such file or directory. Enter file name to delete : rrr.txt Error: rrr.txt - Operation not permitted. Enter file name to delete : foo.txt
Syntaxe Python pour supprimer un dossier
shutil.rmtree()
Exemple pour shutil.rmtree()
#!/usr/bin/python
import os
import sys
import shutil
# Get directory name
mydir= raw_input("Enter directory name: ")
## Try to remove tree; if failed show an error using try...except on screen
try:
shutil.rmtree(mydir)
except OSError as e:
print ("Error: %s - %s." % (e.filename, e.strerror))
Utiliser
shutil.rmtree(path[, ignore_errors[, onerror]])
(Voir la documentation complète sur shutil et/ou
os.remove
Et
os.rmdir
(documentation Complète sur os.)
Pour supprimer des fichiers:
, Vous pouvez utiliser unlink
ou remove
.
os.unlink(path, *, dir_fd=None)
Ou
os.remove(path, *, dir_fd=None)
Cette fonction supprime (supprime) le chemin du fichier. Si un chemin est un répertoire, OSError
est soulevée.
En Python 2, si le chemin n'existe pas, OSError
avec [Errno 2] (ENOENT
) est soulevée. En Python 3, FileNotFoundError
avec [Errno 2] (ENOENT
) est déclenché. En Python 3, parce que FileNotFoundError
est une sous-classe de OSError
, attraper ce dernier attrapera le premier.
Pour suppression de dossiers:
os.rmdir(path, *, dir_fd=None)
rmdir
supprimer (supprimer) le chemin du répertoire. Ne fonctionne que lorsque le répertoire est vide, sinon OSError est déclenché.
Afin de supprimer des arbres de répertoires entiers, shutil.rmtree()
peut être utilisé.
shutil.rmtree(path, ignore_errors=False, onerror=None)
shutil.rmtree
Supprimer une arborescence de répertoires. Chemin d'accès doit pointer vers un répertoire (mais pas un lien symbolique vers un répertoire).
Si ignore_errors a la valeur true, les erreurs résultant de l'échec des suppressions seront ignorées et si omises, ces erreurs sont traitées en appelant un gestionnaire spécifié par onerror ou, si cela est omis, elles déclenchent une exception.
Voir aussi:
os.removedirs(name)
os.removedirs(name)
Supprimer des répertoires de manière récursive. Fonctionne comme rmdir () sauf que, si le répertoire leaf est supprimé avec succès, removedirs() essaie de supprimer successivement tous les répertoires parents mentionnés dans path jusqu'à ce qu'une erreur soit déclenchée (ce qui est ignoré, car cela signifie généralement qu'un répertoire parent n'est pas vide).
Par exemple, os.removedirs('foo/bar/baz') d'abord supprimer le répertoire 'foo/bar/baz, puis supprimer 'foo/bar" et " foo " si elles sont vides.
Créez une fonction pour vous les gars.
def remove(path):
""" param <path> could either be relative or absolute. """
if os.path.isfile(path):
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
raise ValueError("file {} is not a file or dir.".format(path))
Vous pouvez utiliser le haut-pathlib
module (nécessite Python 3.4+, mais il y a des backports pour les anciennes versions sur PyPI: pathlib
, pathlib2
).
Pour supprimer un fichier, il est le unlink
méthode:
import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
, Ou la rmdir
méthode pour supprimer un vide dossier:
import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
Comment supprimer un fichier ou un dossier en Python?
Pour Python 3, supprimer le fichier et le répertoire individuellement, utilisez les unlink
et rmdir
Path
méthodes de l'objet respectivement:
from pathlib import Path
dir_path = Path.home() / 'directory'
file_path = dir_path / 'file'
file_path.unlink() # remove file
dir_path.rmdir() # remove directory
Notez que vous pouvez également utiliser des chemins relatifs avec Path
objets, et vous pouvez vérifier votre répertoire de travail en cours avec Path.cwd
.
Pour supprimer des fichiers et des répertoires individuels dans Python 2, consultez la section intitulée ci-dessous.
À supprimer un répertoire contenant du contenu, utiliser shutil.rmtree
, et notez que ceci est disponible en Python 2 et 3:
from shutil import rmtree
rmtree(dir_path)
Démonstration
Nouveau dans Python 3.4 est l'objet Path
.
Utilisons un pour créer un répertoire et un fichier pour démontrer l'utilisation. Notez que nous utilisons le /
pour joindre les parties du chemin, cela fonctionne autour des problèmes entre les systèmes d'exploitation et des problèmes d'utilisation de barres obliques inverses sur Windows (où vous devez soit doubler vos barres obliques inverses comme \\
ou utilisez des chaînes brutes, comme r"foo\bar"
):
from pathlib import Path
# .home() is new in 3.5, otherwise use os.path.expanduser('~')
directory_path = Path.home() / 'directory'
directory_path.mkdir()
file_path = directory_path / 'file'
file_path.touch()
Et maintenant:
>>> file_path.is_file()
True
Maintenant, supprimons-les. D'abord le fichier:
>>> file_path.unlink() # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False
Nous pouvons utiliser globbing pour supprimer plusieurs fichiers-d'abord, créons quelques fichiers pour cela:
>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()
Ensuite, il suffit d'itérer sur le motif glob:
>>> for each_file_path in directory_path.glob('*.my'):
... print(f'removing {each_file_path}')
... each_file_path.unlink()
...
removing ~/directory/foo.my
removing ~/directory/bar.my
Maintenant, démontrant la suppression du répertoire:
>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False
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 fichier:
file_path.parent.mkdir()
file_path.touch()
Et notez que rmdir
échoue à moins qu'il ne soit vide, ce qui explique pourquoi rmtree est si pratique:
>>> directory_path.rmdir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir
self._accessor.rmdir(self)
File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped
return strfunc(str(pathobj), *args)
OSError: [Errno 39] Directory not empty: '/home/excelsiora/directory'
Maintenant, importez rmtree et passez le répertoire à la fonction:
from shutil import rmtree
rmtree(directory_path) # remove everything
Et nous pouvons voir que tout a été enlevé:
>>> directory_path.exists()
False
Python 2
Si vous êtes sur Python 2, Il y a un backport du module pathlib appelé pathlib2 , qui peut être installé avec pip:
$ pip install pathlib2
Et puis vous pouvez alias la bibliothèque à pathlib
import pathlib2 as pathlib
Ou simplement importer directement l'objet Path
(comme démontré ici):
from pathlib2 import Path
Si c'est trop, vous pouvez supprimer des fichiers avec os.remove
ou os.unlink
from os import unlink, remove
from os.path import join, expanduser
remove(join(expanduser('~'), 'directory/file'))
Ou
unlink(join(expanduser('~'), 'directory/file'))
Et vous pouvez supprimer des répertoires avec os.rmdir
:
from os import rmdir
rmdir(join(expanduser('~'), 'directory'))
Notez qu'il y a aussi un os.removedirs
- Il supprime uniquement les répertoires vides de manière récursive, mais cela peut convenir à votre cas d'utilisation.
Shutil.rmtree est la fonction asynchrone, donc, si vous voulez vérifier quand il, vous pouvez l'utiliser tout en...boucle
import os
import shutil
shutil.rmtree(path)
while os.path.exists(path):
pass
print('done')
import os
folder = '/Path/to/yourDir/'
fileList = os.listdir(folder)
for f in fileList:
filePath = folder + '/'+f
if os.path.isfile(filePath):
os.remove(filePath)
elif os.path.isdir(filePath):
newFileList = os.listdir(filePath)
for f1 in newFileList:
insideFilePath = filePath + '/' + f1
if os.path.isfile(insideFilePath):
os.remove(insideFilePath)
Je recommande d'utiliser subprocess
Si écrire un code beau et lisible est votre tasse de thé:
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
Et si vous n'êtes pas un ingénieur logiciel, alors peut-être envisager D'utiliser Jupyter; vous pouvez simplement taper des commandes bash:
!rm -r my_dir
, Traditionnellement, vous utilisez shutil
:
import shutil
shutil.rmtree(my_dir)