Question Supprimer un fichier ou un dossier


Comment supprimer un fichier ou un dossier en Python?


1448
2017-08-09 13:05


origine


Réponses:


os.remove() va supprimer un fichier.

os.rmdir() va supprimer un répertoire vide.

shutil.rmtree() va supprimer un répertoire et tout son contenu.


2342
2017-08-09 13:07



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 uniquement ce fichier. Cela peut être réalisé de deux façons:
    une. os.path.isfile("/path/to/file")
    b. Utilisation 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))

101
2018-03-07 06:37



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


61
2017-08-09 13:09



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 le chemin est un répertoire, OSError est élevé.

En Python 2, si le chemin n'existe pas, OSError avec [Errno 2] (ENOENT) est élevé. En Python 3, FileNotFoundError avec [Errno 2] (ENOENT) est élevé. En Python 3, parce que FileNotFoundError est une sous-classe de OSError, attraper celui-ci va attraper le premier.

Pour supprimer des dossiers:

os.rmdir(path, *, dir_fd=None)

rmdir Supprime (supprime) le chemin du répertoire. Ne fonctionne que lorsque le répertoire est vide, sinon, OSError est élevé. Afin de supprimer des arborescences 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 entière. Le chemin doit pointer vers un répertoire (mais pas un lien symbolique vers un répertoire).

Si ignore_errors est vrai, les erreurs résultant des suppressions échouées seront ignorées et si elles sont fausses ou 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 é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 leaf est supprimé, removedirs () essaye de supprimer successivement chaque répertoire parent mentionné dans path jusqu'à ce qu'une erreur soit levé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') supprimera d'abord le répertoire 'foo / bar / baz', puis supprimera 'foo / bar' et 'foo' s'ils sont vides.


50
2017-08-22 12:22



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

22
2018-01-22 09:40



Vous pouvez utiliser le built-in pathlib module (nécessite Python 3.4+, mais il existe des backports pour les anciennes versions sur PyPI: pathlib, pathlib2).

Pour supprimer un fichier, il y a unlink méthode:

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

Ou la rmdir méthode pour enlever un vide dossier:

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()

17
2017-08-06 20:10



Comment supprimer un fichier ou un dossier en Python?

Pour Python 3, pour supprimer le fichier et le répertoire individuellement, utilisez le unlink et rmdir  Path méthodes d'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 actuel avec Path.cwd.

Pour supprimer des fichiers et des répertoires individuels dans Python 2, reportez-vous à la section ci-dessous.

Pour supprimer un répertoire avec le contenu, utilisez shutil.rmtree, et notez que ceci est disponible dans Python 2 et 3:

from shutil import rmtree

rmtree(dir_path)

Manifestation

Nouveau dans Python 3.4 est le Path objet.

Utilisons-en un pour créer un répertoire et un fichier pour démontrer l'utilisation. Notez que nous utilisons le / pour rejoindre les parties du chemin, cela contourne les problèmes entre les systèmes d'exploitation et les problèmes liés à l'utilisation de barres obliques inverses sous Windows (où vous devez doubler vos antislashs comme \\ 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, supprimons-les. D'abord le fichier:

>>> file_path.unlink()     # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False

Nous pouvons utiliser la 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 de parcourir le modèle 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, en démontrant 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, 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 tout simplement importer directement le Path objet (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.


7
2018-02-12 01:44



shutil.rmtree est la fonction asynchrone, donc si vous voulez vérifier quand c'est terminé, vous pouvez utiliser while ... loop

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

3
2018-03-23 17:08