Я хочу получить список только текущего каталога (без рекурсии).
Также у меня есть точка монтирования /mnt/test0
с ext4
.
Я делаю:
>>> [x for x in os.listdir('/mnt/test0/base/trash') if os.path.isdir(x)]
[]
/mnt/test0/base/trash
имеет один каталог test
, однако list
пуст.
Если я сделаю:
>>> [x for x in os.listdir('/mnt/test0/base/trash')]
Это здесь.
>>> [x for x in os.listdir('/mnt/test0/base/trash')]
['test']
Линукс ls
:
# ls -lA
total 28
drwxrwx--- 9 root root 28672 Nov 11 23:00 test
Что за странная ошибка os.path.isdir(x)
?
ОБНОВЛЯТЬ:
Я перезапускаю Python и теперь получаю результат:
>>> [x for x in os.listdir('/mnt/test0/base/trash') if os.path.isdir(x)]
['test']
Это вообще странно.
Проблема в том, что os.listdir
перечисляет только последние части пути. Обратите внимание, как он возвращает ['test']
, а не ['/mnt/test0/base/trash/test']
.
Когда вы проверяете это с помощью isdir()
, имена оцениваются относительно текущего рабочего каталога, а не /mnt/test0/base/trash
. В основном вам нужно что-то вроде этого:
>>> d = '/mnt/test0/base/trash'
>>> [x for x in os.listdir(d) if os.path.isdir(os.path.join(d, x))]
Вы смотрели в каталоге, в котором вы используете Python? Есть ли в нем каталог "test"?
@Kirill это будет зависеть от того, откуда вы запускаете код (то есть от вашего текущего рабочего каталога). Ваш исходный код должен работать нормально, если вы запустите его изнутри /mnt/test0/base/trash
и потерпите неудачу везде.
Спасибо. :) Но у меня другой вопрос. Иногда возвращает каталог. Я перезапускаю Python и получаю
['test']
сos.path.isdir(x)
. Почему? Это странное поведение Python?