web-dev-qa-db-fra.com

Supprimer un fichier ou un dossier

Comment supprimer un fichier ou un dossier en Python?

1811
Zygimantas

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:

2900
RichieHindle

Syntaxe Python pour supprimer un fichier

import os
os.remove("/tmp/<file_name>.txt")

Ou

import os
os.unlink("/tmp/<file_name>.txt")

Meilleur entrainement

  1. Tout d’abord, vérifiez si le fichier ou le dossier existe ou non, puis supprimez-le seulement. Ceci peut être réalisé de deux manières:
    une. os.path.isfile("/path/to/file")
    b. Utilisez 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)

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

 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 

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))
211
anand tripathi

Utilisation

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 .)

71
Mihai Maruseac

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 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.

Pour supprimer des dossiers:

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.

55
Somnath Muluk

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))
29
flycee

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()
_
28
MSeifert

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 rmdirPath:

_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)
_

Manifestation

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
_

Python 2

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.

16
Aaron Hall

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')
3
m0z4rt
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)
2
Lalithesh

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) 
0
Miladiouss