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)
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.
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)
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.
Une autre manière que j'ai faite ceci:
os.popen('rm -f ./yourdir')
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)
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
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
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:
shutil.rmtree()
sur un lien symbolique (qui passera le test os.path.isdir()
s’il est lié à un répertoire).#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
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.
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)