Почему os.listdir отображается в файле, когда я устанавливаю его в каталог?

#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")