web-dev-qa-db-fra.com

Comment écraser un dossier s'il existe déjà lors de sa création avec makedirs?

Le code suivant me permet de créer un répertoire s'il n'existe pas déjà.

dir = 'path_to_my_folder'
if not os.path.exists(dir):
    os.makedirs(dir)

Le dossier sera utilisé par un programme pour écrire des fichiers texte dans ce dossier. Mais je veux commencer avec un tout nouveau dossier vide la prochaine fois que mon programme s'ouvrira.

Existe-t-il un moyen d'écraser le dossier (et d'en créer un nouveau, avec le même nom) s'il existe déjà?

31
Shankar Kumar
import os
import shutil

dir = 'path_to_my_folder'
if os.path.exists(dir):
    shutil.rmtree(dir)
os.makedirs(dir)
53
inspectorG4dget
import os
import shutil

path = 'path_to_my_folder'
if not os.path.exists(path):
    os.makedirs(path)
else:
    shutil.rmtree(path)           # Removes all the subdirectories!
    os.makedirs(path)

Et ça? Jetez un œil à la bibliothèque shutil de Python!

15
cybertextron

os.path.exists(dir) la vérification est recommandée mais peut être évitée en utilisant ignore_errors

dir = 'path_to_my_folder'
shutil.rmtree(dir, ignore_errors=True)
os.makedirs(dir)
2
shrishinde

Dis le

dir = 'path_to_my_folder'
if not os.path.exists(dir): # if the directory does not exist
    os.makedirs(dir) # make the directory
else: # the directory exists
    #removes all files in a folder
    for the_file in os.listdir(dir):
        file_path = os.path.join(dir, the_file)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path) # unlink (delete) the file
        except Exception, e:
            print e
1
ghostbust555
try:
    os.mkdir(path)
except FileExistsError:
    pass
0
icanxy

Voici une version EAFP (plus facile à demander pardon que permission):

import errno
import os
from shutil import rmtree
from uuid import uuid4

path = 'path_to_my_folder'
temp_path = os.path.dirname(path)+'/'+str(uuid4())
try:
    os.renames(path, temp_path)
except OSError as exception:
    if exception.errno != errno.ENOENT:
        raise
else:
    rmtree(temp_path)
os.mkdir(path)
0
El Ruso