使用os.listdir仅显示目录

12

当使用os.listdir输出目录时,我该如何指定要列出哪个目录以及只输出目录而不是文件?

我的代码如下:

file_to_search = raw_input("which file to search?\n>")

dirlist=[]

for filename in os.listdir(file_to_search):
    if os.path.isdir(filename) == True:
        dirlist.append(filename)

print dirlist

如果我通过raw_input输入当前工作目录,那么它实际上是可以工作的。然而,如果我输入其他任何内容,列表就会返回空。我试图分解和解决这个问题,但每个代码片段单独使用时都能按预期工作。


你可以分享一下你在raw_input字段中输入的内容以及你使用的操作系统吗? - MSeifert
只是为了记录,因为Jean-Francois的解决方案有效: 我输入的示例:C:/、D:/X/Y、C:\、D:\X\Y、D:\X\Y 操作系统:Windows - Felix
1个回答

19

这是预期的,因为os.listdir仅返回文件/目录的名称,因此除非在当前目录中运行它,否则找不到对象。

您需要join扫描目录以计算完整路径,以使其起作用:

for filename in os.listdir(file_to_search):
    if os.path.isdir(os.path.join(file_to_search,filename)):
        dirlist.append(filename)

注意列表推导式版本:

dirlist = [filename for filename in os.listdir(file_to_search) if os.path.isdir(os.path.join(file_to_search,filename))]

2
最好使用以下代码,参见 https://dev59.com/cnVC5IYBdhLWcg3w7V73#63715910 dirlist = [d for d in next(os.walk(file_ro_search))[1]] - Mr_and_Mrs_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接