Попытка удалить все файлы в определенном каталоге приводит к следующей ошибке:
OSError: [Errno 2] No such file or directory: '/home/me/test/*'
Код, который я запускаю:
import os
test = "/home/me/test/*"
os.remove(test)
Попытка удалить все файлы в определенном каталоге приводит к следующей ошибке:
OSError: [Errno 2] No such file or directory: '/home/me/test/*'
Код, который я запускаю:
import os
test = "/home/me/test/*"
os.remove(test)
os.remove()
не работает в каталоге, а os.rmdir()
работает только в пустом каталоге. И Python не будет автоматически расширять "/home/me/test/*", как это делают некоторые оболочки.
Однако вы можете использовать shutil.rmtree()
в каталоге, чтобы сделать это.
import shutil
shutil.rmtree('/home/me/test')
будьте осторожны, так как он удаляет файлы и подкаталоги.
os.remove не разрешает шаблоны в стиле unix. Если вы используете Unix-подобную систему, вы можете:
os.system('rm '+test)
Иначе вы можете:
import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
os.remove(i)
Поскольку * - это оболочечная конструкция. Python буквально ищет файл с именем "*" в каталоге /home/me/test. Используйте listdir, чтобы сначала получить список файлов, а затем вызывать удаление на каждом из них.
Хотя это старый вопрос, я думаю, что никто не ответил, используя этот подход:
# 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)
звезда расширяется оболочкой Unix. Ваш вызов не имеет доступа к оболочке, он просто пытается удалить файл с именем, заканчивающимся звездочкой
shutil.rmtree() для большинства случаев. Но это не работает в Windows для файлов readonly. Для Windows импортируйте win32api и win32con модули из 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
Еще один способ, которым я это сделал:
os.popen('rm -f ./yourdir')
Это позволит получить все файлы в каталоге и удалить их.
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR, "foldername")
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.join(dir, file)
os.remove(path)
Немного хак, но если вы хотите сохранить каталог, можно использовать следующее.
import os
import shutil
shutil.rmtree('/home/me/test')
os.mkdir('/home/me/test')
os.remove удалит только один файл.
Чтобы удалить с помощью подстановочных знаков, вам нужно написать свою собственную процедуру, которая обрабатывает это.
Есть несколько предложенных подходов, перечисленных на этой странице форума.
Пожалуйста, см. мой ответ здесь:
fooobar.com/questions/10881/...
Это долгое и безобразное, но надежное и эффективное решение.
Он решает несколько проблем, которые не рассматриваются другими респондентами:
shutil.rmtree()
по символической ссылке (которая пройдет тест os.path.isdir()
, если она ссылается на каталог).#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