Supprimer un fichier ou un dossier

Comment supprimer un fichier ou un dossier en Python?

1514
demandé sur anand tripathi 2011-08-09 17:05:42

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.

2429
répondu RichieHindle 2018-09-14 10:53:29

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

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

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))
119
répondu anand tripathi 2018-07-10 07:42:13

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

62
répondu Mihai Maruseac 2018-06-07 15:48:37

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.

52
répondu Somnath Muluk 2016-10-21 19:54:00

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))
24
répondu flycee 2017-01-22 09:40:25

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()
22
répondu MSeifert 2017-09-24 10:32:58

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.

8
répondu Aaron Hall 2018-02-12 01:44:11

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')
3
répondu m0z4rt 2018-03-23 17:08:11
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
répondu Lalithesh 2017-10-25 12:49:37

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) 
1
répondu Miladiouss 2018-05-30 23:11:06