web-dev-qa-db-fra.com

Supprimer tous les fichiers d'un répertoire

Essayer de supprimer tous les fichiers d'un répertoire donné me donne l'erreur suivante:

OSError: [Errno 2] No such file or directory: '/home/me/test/*'

Le code que je lance est:

import os
test = "/home/me/test/*"
os.remove(test)
34
Kelvin

os.remove() ne fonctionne pas sur un répertoire et os.rmdir() fonctionnera uniquement sur un répertoire vide. Et Python ne développera pas automatiquement "/ home/me/test/*" comme le font certains shells.

Pour ce faire, vous pouvez utiliser shutil.rmtree() sur le répertoire.

import shutil
shutil.rmtree('/home/me/test') 

faites attention car il supprime les fichiers et les sous-répertoires aussi.

45
Jacob Mattison

os.remove ne résout pas les modèles de style unix. Si vous utilisez un système de type Unix, vous pouvez:

os.system('rm '+test)

Sinon, vous pouvez:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)
11
basaundi

Parce que le * est une construction Shell. Python recherche littéralement un fichier nommé "*" dans le répertoire/home/me/test. Utilisez listdir pour obtenir d’abord une liste des fichiers, puis appelez remove sur chacun d’eux.

7
mamboking

Une autre manière que j'ai faite ceci:

os.popen('rm -f ./yourdir')
3
Alex

Bien qu’il s’agisse d’une question ancienne, je pense qu’aucune d’entre elles n’a déjà répondu de cette façon:

# python 2.7
import os

d='/home/me/test'
filesToRemove = [os.path.join(d,f) for f in os.listdir(d)]
for f in filesToRemove:
    os.remove(f) 
3
user3281700

star est étendu par Unix Shell. Votre appel n'accède pas à Shell, il s'agit simplement de supprimer un fichier dont le nom se termine par l'étoile

2
DVK

shutil.rmtree () dans la plupart des cas. Mais cela ne fonctionne pas dans Windows pour les fichiers en lecture seule. Pour Windows, importez les modules win32api et win32con de PyWin32.

def rmtree(dirname):
    retry = True
    while retry:
        retry = False
        try:
            shutil.rmtree(dirname)
        except exceptions.WindowsError, e:
            if e.winerror == 5: # No write permission
                win32api.SetFileAttributes(dirname, win32con.FILE_ATTRIBUTE_NORMAL)
                retry = True
1
zinovii

S'il vous plaît voir ma réponse ici:

https://stackoverflow.com/a/24844618/2293304

C'est une solution longue et laide, mais fiable et efficace.

Il résout quelques problèmes qui ne sont pas abordés par les autres intervenants:

  • Il gère correctement les liens symboliques, y compris le fait de ne pas appeler shutil.rmtree() sur un lien symbolique (qui passera le test os.path.isdir() s’il est lié à un répertoire).
  • Il gère bien les fichiers en lecture seule.
0
Rockallite
#python 2.7
import tempfile
import shutil
import exceptions
import os

def TempCleaner():
    temp_dir_name = tempfile.gettempdir()
    for currentdir in os.listdir(temp_dir_name):
        try:
           shutil.rmtree(os.path.join(temp_dir_name, currentdir))
        except exceptions.WindowsError, e:
            print u'Не удалось удалить:'+ e.filename
0
Alexander Levitto

os.remove ne supprimera qu'un seul fichier.

Pour supprimer des caractères génériques, vous devez écrire votre propre routine qui gère cela.

Il y a de nombreuses approches suggérées listées sur cette page de forum.

0
Reed Copsey

Importation OS:

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR,"foldername")

Pour root, dirs, fichiers dans os.walk (dir):

for file in files:
path = os.path.join(dir,file)
os.remove(path)
0
Osman ali Khan