#python #python-3.x #windows #directory #subdirectory
#python #python-3.x #Windows #каталог #подкаталог
Вопрос:
Итак, я создаю проект python, который удаляет файлы в каталоге, и мой код:
tmp_dir = r"C:UsersUserAppDataRoamingMicrosoftTeamstmp"
tmp_list = os.listdir(tmp_dir)
for tmp_files in tmp_list:
shutil.rmtree(os.path.join(tmp_dir, tmp_files))
и я получаю следующую ошибку:
Трассировка (последний последний вызов): файл «<местоположение моей программы>», строка 9, в shutil.rmtree(os.path.join(tmp_dir, tmp_files)) Файл «C:UsersUserAppDataLocalProgramsPythonPython39libshutil.py «, строка 737, в rmtree возвращает файл _rmtree_unsafe(path, onerror) «C:UsersUserAppDataLocalProgramsPythonPython39libshutil.py «, строка 596, в файле _rmtree_unsafe onerror(os.scandir, path, sys.exc_info()) «C:UsersUserAppDataLocalProgramsPythonPython39libshutil.py «, строка 593, в _rmtree_unsafe с os.scandir(путь) как scandir_it: NotADirectoryError: [WinError 267] Недопустимое имя каталога: ‘C:UsersUserAppDataRoamingMicrosoftTeamstmpx64.json ‘
Процесс завершен с кодом выхода 1
Не могли бы вы сказать мне, что не так в моем коде? Любая помощь приветствуется.
Ответ №1:
shutil.rmtree
удаляет все дерево каталогов.
Чтобы удалить один файл, вы можете использовать os.remove
.
Комментарии:
1. Итак, я получаю сообщение об ошибке, потому что я не могу удалить все файлы в каталоге?
2. Нет, вы пытаетесь удалить каждый отдельный файл (проверьте свой
for
цикл) сshutil.rmtree
помощью , но если вам нужно использоватьos.remove
. Если вам просто нужно удалить tmp_dir, используйте для этого rmtree.3. Да, я хочу удалить все до единого файлы в этом каталоге.
4. Чтобы удалить каталог и все, что в нем находится, вызовите
shutil.rmtree
каталог один раз. Вот и все.
Ответ №2:
os.listdir
возвращает все файлы и каталоги по указанному пути. Если вы хотите удалить все каталоги, которые вы можете отфильтровать с помощью os.path.isdir
, а затем удалить только каталоги.
Вы можете попробовать этот код для получения всех каталогов в данной папке:
tmp_list = [d for d in os.listdir(tmp_dir) if os.path.isdir(os.path.join(tmp_dir, d))]
Ответ №3:
в os.listdir перечислены как файлы, так и папки
Это rmtree, которое вы делаете, работает только с папками
Поэтому, когда итерации достигают файла, он выдает ошибку
Как для папок, так и для файлов вам нужно сделать что-то вроде этого
for temp_files in temp_list :
if temp_files.isdir():
shutil.rmtree(os.path.join(tmp_dir, tmp_files))
else :
os.remove("file path/filename")