Попытка удалить все файлы в определенном каталоге дает мне следующую ошибку:
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, чтобы сначала получить список файлов, а затем вызывать удаление на каждом из них.
Еще один способ, которым я это сделал:
os.popen('rm -f ./yourdir')
rm -f directory
просто не работает. Интересно, почему за это так много проголосовало.
Хотя это старый вопрос, я думаю, что никто не ответил на этот подход:
#python 2.7
import os
filesToRemove = [f for f in os.listdir('/home/me/test')]
os.remove(f) for f in files
os.remove()
полный путь к файлу, когда вы используете os.remove()
, поэтому вам нужно будет выполнить os.remove(os.path.join("/home/me/test", f))
для этого работать.
os.remove(f) for f in files
не является допустимым синтаксисом. Не все использует понимание.
звезда расширяется оболочкой Unix. Ваш вызов не имеет доступа к оболочке, он просто пытается удалить файл с именем, заканчивающимся звездочкой
#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
Пожалуйста, см. мой ответ здесь:
https://stackoverflow.com/questions/185936/how-to-delete-the-contents-of-a-folder-in-python
Это долгое и безобразное, но надежное и эффективное решение.
Он решает несколько проблем, которые не рассматриваются другими респондентами:
shutil.rmtree()
по символической ссылке (которая пройдет тест os.path.isdir()
, если она ссылается на каталог).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.remove удалит только один файл.
Чтобы удалить с помощью подстановочных знаков, вам нужно написать свою собственную процедуру, которая обрабатывает это.
Есть несколько предложенных подходов, перечисленных на этой странице форума.