Comment supprimer un fichier ou un dossier en Python?
os.remove()
supprime un fichier.
os.rmdir()
supprime un répertoire vide.
shutil.rmtree()
supprime un répertoire et tout son contenu.
Path
objets du module Python 3.4+ pathlib
exposent également les méthodes d'instance suivantes:
pathlib.Path.unlink()
supprime un fichier ou un lien symbolique.
pathlib.Path.rmdir()
supprime un répertoire vide.
import os
os.remove("/tmp/<file_name>.txt")
Ou
import os
os.unlink("/tmp/<file_name>.txt")
os.path.isfile("/path/to/file")
exception 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)
#!/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))
Entrez le nom du fichier à supprimer: demo.txt Erreur: demo.txt - Aucun fichier ou répertoire de ce type. Entrez le nom du fichier à supprimer: rrr.txt Erreur: rrr.txt - Opération non autorisée. Entrez le nom du fichier à supprimer: foo.txt
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))
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 path est un répertoire, OSError
est levé.
Dans Python 2, si le chemin n'existe pas, OSError
avec [Errno 2] (ENOENT
) est déclenché. Dans Python 3, FileNotFoundError
avec [Errno 2] (ENOENT
) est déclenché. Dans Python 3, étant donné que FileNotFoundError
est une sous-classe de OSError
, capturer le dernier interceptera le premier.
os.rmdir(path, *, dir_fd=None)
rmdir
Supprimez (supprimez) le chemin du répertoire. Ne fonctionne que lorsque le répertoire est vide, sinon, OSError est déclenché. Afin de supprimer des arborescences de répertoires entières, shutil.rmtree()
peut être utilisé.
shutil.rmtree(path, ignore_errors=False, onerror=None)
shutil.rmtree
Supprimer une arborescence de répertoires complète. Path doit pointer vers un répertoire (mais pas un lien symbolique vers un répertoire).
Si ignore_errors est true, les erreurs résultant des suppressions ayant échoué sont ignorées. Si false ou est omis, ces erreurs sont gérées en appelant un gestionnaire spécifié par onerror ou, si elles sont omises, elles déclenchent une exception.
Voir également:
os.removedirs(name)
os.removedirs(name)
Supprimez les répertoires de manière récursive. Fonctionne comme rmdir () sauf que, si le répertoire feuille est supprimé avec succès, removedirs () tente de supprimer successivement tous les répertoires parent mentionnés dans path jusqu'à ce qu'une erreur soit généré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') va d'abord supprimer le répertoire 'foo/bar/baz', puis supprimer 'foo/bar' et 'foo' s'ils sont vides.
Créer 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 module intégré pathlib
(nécessite Python 3.4+, mais des versions antérieures de versions antérieures sont disponibles sur PyPI: pathlib
, pathlib2
).
Pour supprimer un fichier, il existe la méthode unlink
:
_import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
_
Ou la méthode rmdir
pour supprimer un dossier vide :
_import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
_
Comment supprimer un fichier ou un dossier en Python?
Pour Python 3, pour supprimer le fichier et le répertoire individuellement, utilisez les méthodes d'objet unlink
et rmdir
Path
:
_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 des objets Path
et vérifier votre répertoire de travail actuel avec _Path.cwd
_.
Pour supprimer des fichiers et des répertoires individuels dans Python 2, reportez-vous à la section ainsi libellée.
Pour supprimer un répertoire avec un contenu, utilisez shutil.rmtree
et notez qu'il est disponible dans Python 2 et 3:
_from shutil import rmtree
rmtree(dir_path)
_
La nouveauté de Python 3.4 est l’objet Path
.
Utilisons-en un pour créer un répertoire et un fichier illustrant l’utilisation. Notez que nous utilisons le _/
_ pour joindre les parties du chemin, ce qui résout les problèmes liés aux systèmes d'exploitation et à l'utilisation de barres obliques inverses sous Windows (vous devez donc 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 - commençons par créer quelques fichiers pour cela:
_>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()
_
Ensuite, il suffit de parcourir 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émonstration de la suppression du répertoire:
_>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False
_
Que faire 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 sauf s’il est 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/excelsiora/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 sur Python 2, il existe un portage 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 bien importez directement l'objet Path
(comme illustré 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.
shutil.rmtree est la fonction asynchrone, donc si vous voulez vérifier quand elle est terminée, vous pouvez utiliser la boucle while ...
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 lisible 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 en logiciel, envisagez peut-être d'utiliser Jupyter; vous pouvez simplement taper les commandes bash:
!rm -r my_dir
Traditionnellement, vous utilisez shutil
:
import shutil
shutil.rmtree(my_dir)