列出目录并获取目录名称

83 投票
6 回答
217212 浏览
提问于 2025-04-15 21:54

我正在尝试写一段代码,目的是列出一个文件夹里的所有子文件夹,然后切换到那个文件夹,并获取当前文件夹的名字。下面是我目前写的代码,但现在还不能正常工作。我好像只得到了父文件夹的名字。

import os

for directories in os.listdir(os.getcwd()): 
    dir = os.path.join('/home/user/workspace', directories)
    os.chdir(dir)
    current = os.path.dirname(dir)
    new = str(current).split("-")[0]
    print new

这个文件夹里还有其他文件,但我不想列出它们。我试过下面的代码,但也没有成功。

for directories in os.path.isdir(os.listdir(os.getcwd())): 

有没有人能帮我看看我哪里出错了?

谢谢

我已经让它工作了,但感觉过程有点绕。

import os
os.chdir('/home/user/workspace')
all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]
for dirs in all_subdirs:
    dir = os.path.join('/home/user/workspace', dirs)
    os.chdir(dir)
    current = os.getcwd()
    new = str(current).split("/")[4]
    print new

6 个回答

26
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in dirs:
        print os.path.join(root, name)

Walk是一个很不错的内置功能,适合你正在做的事情。

31

关于新版本的Python

我觉得@RichieHindle的回答挺好的,不过我这里加了一个小修改。

import os

folder = './my_folder'

sub_folders = [name for name in os.listdir(folder) if os.path.isdir(os.path.join(folder, name))]

print(sub_folders)

否则对我来说就不太好用了。

108

这段代码会打印出当前目录下的所有子目录:

print [name for name in os.listdir(".") if os.path.isdir(name)]

我不太明白你用 split("-") 是干嘛的,不过也许这段代码能帮你找到解决办法?

如果你想要目录的完整路径,可以使用 abspath

print [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)]

请注意,这些代码只会获取直接的子目录。如果你想要更深层的子目录,比如子子目录之类的,应该使用 walk,就像其他人建议的那样。

撰写回答