Comment supprimer un fichier ou un dossier ?
Mais qu'en est-il d'un répertoire non vide ?
Vous pouvez utiliser la fonction intégrée pathlib
(nécessite Python 3.4+, mais il existe des backports pour les versions plus anciennes sur PyPI : pathlib
, pathlib2
).
Pour supprimer un fichier, il existe la fonction unlink
méthode :
import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
Ou le rmdir
pour supprimer une vide dossier :
import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
@Pranasas Malheureusement, il semble qu'il n'y ait rien (en natif) dans l'application pathlib
qui peut gérer la suppression des répertoires non vides. Cependant, vous pouvez utiliser shutil.rmtree
. Elle a été mentionnée dans plusieurs autres réponses et je ne l'ai donc pas incluse.
Comment supprimer un fichier ou un dossier en Python ?
Pour Python 3, pour supprimer le fichier et le répertoire individuellement, utilisez la commande unlink
y rmdir
Path
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
et vous pouvez vérifier votre répertoire de travail actuel avec Path.cwd
.
Pour la suppression de fichiers et de répertoires individuels dans Python 2, voir la section correspondante ci-dessous.
Pour supprimer un répertoire avec son contenu, utilisez shutil.rmtree
et notez que cette fonction est disponible dans Python 2 et 3 :
from shutil import rmtree
rmtree(dir_path)
La nouveauté de Python 3.4 est la fonction Path
objet.
Utilisons-en un pour créer un répertoire et un fichier afin de démontrer son utilisation. Notez que nous utilisons l'option /
pour joindre les parties du chemin, ce qui permet de contourner les problèmes entre les systèmes d'exploitation et les problèmes liés à l'utilisation des barres obliques inverses sous Windows (où vous devez soit doubler vos barres obliques inverses, comme par exemple \\
ou utiliser 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, il faut les supprimer. D'abord le fichier :
>>> file_path.unlink() # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False
Nous pouvons utiliser le globbing pour supprimer plusieurs fichiers - créons d'abord quelques fichiers pour cela :
>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()
Ensuite, il suffit d'itérer sur le motif global :
>>> 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
Que faire si l'on veut 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 :
file_path.parent.mkdir()
file_path.touch()
et notez que rmdir
échoue à moins qu'il ne soit vide, c'est 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/username/directory'
Maintenant, importez rmtree et passez le répertoire à la fonction :
from shutil import rmtree
rmtree(directory_path) # remove everything
et on peut voir que tout a été enlevé :
>>> directory_path.exists()
False
Si vous êtes sous Python 2, il existe une fonction backport du module pathlib appelé pathlib2 qui peut être installé avec pip :
$ pip install pathlib2
Et ensuite vous pouvez aliaser la bibliothèque à pathlib
import pathlib2 as pathlib
Ou simplement importer directement le 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 existe également un os.removedirs
- il ne supprime que les répertoires vides de manière récursive, mais cela peut convenir à votre cas d'utilisation.
C'est ma fonction pour supprimer les répertoires. Le "path" nécessite le nom de chemin complet.
import os
def rm_dir(path):
cwd = os.getcwd()
if not os.path.exists(os.path.join(cwd, path)):
return False
os.chdir(os.path.join(cwd, path))
for file in os.listdir():
print("file = " + file)
os.remove(file)
print(cwd)
os.chdir(cwd)
os.rmdir(os.path.join(cwd, path))
shutil.rmtree
n'est pas censé être asynchrone. Cependant, il peut sembler l'être sous Windows, avec l'interférence des scanners de virus.
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)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.