Python 奇怪的行为os.path.isdir(x)

Python 奇怪的行为os.path.isdir(x),python,Python,我只想得到当前目录的目录列表,没有递归 此外,我还有ext4的挂载点/mnt/test0 我有: /mnt/test0/base/trash有一个dir测试,但列表为空 如果我这样做: >>> [x for x in os.listdir('/mnt/test0/base/trash')] 在这儿 >>> [x for x in os.listdir('/mnt/test0/base/trash')] ['test'] Linux ls: os.path.

我只想得到当前目录的目录列表,没有递归

此外,我还有ext4的挂载点/mnt/test0

我有:

/mnt/test0/base/trash有一个dir测试,但列表为空

如果我这样做:

>>> [x for x in os.listdir('/mnt/test0/base/trash')]
在这儿

>>> [x for x in os.listdir('/mnt/test0/base/trash')]
['test']
Linux ls:

os.path.isdirx的奇怪bug是什么

更新:

我重新启动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))]
问题是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,并使用os.path.isdirx获得['test']。为什么?这是Python的奇怪行为吗?您是否查看了运行Python的目录?其中是否有目录测试?@Kirill它将取决于您从何处运行代码,即您当前的工作目录。如果您在/mnt/test0/base/trash中运行原始代码,并且在其他任何地方都失败,那么您的原始代码应该可以正常工作。谢谢:但我还有一个问题,有时它会返回目录。我重新启动Python,并使用os.path.isdirx获得['test']。为什么?这是Python的奇怪行为吗?您是否查看了运行Python的目录?其中是否有目录测试?@Kirill它将取决于您从何处运行代码,即您当前的工作目录。如果您在/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))]