Получение абсолютных путей ко всем файлам в папке без обхода подпапок - PullRequest
0 голосов
/ 20 мая 2019

Позвольте

my_dir = "/raid/user/my_dir"

быть папкой в ​​моей файловой системе, которая не текущая папка (т. Е. Она не является результатом os.getcwd()).Я хочу получить абсолютные пути всех файлов на первом уровне иерархии в my_dir (т. Е. Абсолютные пути всех файлов, которые находятся в my_dir, но не в подпапке my_dir) в виде спискаСтроки absolute_paths.Мне это нужно, чтобы потом удалить эти файлы с помощью os.remove().

Это почти тот же вариант использования, что и

Получить абсолютные пути ко всем файлам в каталоге

но разница в том, что я не хочу пересекать иерархию папок: мне нужны только файлы на первом уровне иерархии (на глубине 0 - здесь нет уверенности в терминологии).

Ответы [ 3 ]

1 голос
/ 20 мая 2019

Это решение легко адаптировать: позвоните os.walk() только один раз и не позволяйте ему продолжать:

root, dirs, files = next(os.walk(my_dir, topdown=True))
files = [ os.path.join(root, f) for f in files ]
print(files)
1 голос
/ 20 мая 2019

Вы можете использовать os.scandir, который возвращает объект os.DirEntry , который имеет различные параметры, включая возможность отличать файлы от каталогов.

with os.scandir(somePath) as it:
    paths = [entry.path for entry in it if entry.is_file()]
print(paths)

Если вы также хотите составить список каталогов, вы можете, конечно, удалить условие из списка, если вы хотите видеть их в списке.

В документации также есть это примечание под listDir:

См. Также Функция scandir () возвращает записи каталога вместе с информацией об атрибутах файла, обеспечивая лучшую производительность для многих распространенных случаев использования.

1 голос
/ 20 мая 2019

Вы можете использовать модуль os.path и понимание списка.

import os

absolute_paths= [os.path.abspath(f) for f in os.listdir(my_dir) if os.path.isfile(f)]
...