列出目录并获取目录的名称

问题描述 投票:0回答:6

我正在尝试获取代码来列出文件夹中的所有目录,将目录更改为该文件夹并获取当前文件夹的名称。到目前为止,我的代码如下,目前无法运行。我似乎正在获取父文件夹名称。

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
python list directory operating-system
6个回答
110
投票

这将打印当前目录的所有子目录:

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)]) # needs outside parenthesis

请注意,这些代码片段只会获取直接子目录。 如果您想要子子目录等,您应该按照其他人的建议使用

walk


32
投票

对于新版本的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)

否则这对我来说不太有用


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

步行对于你正在做的事情来说是一个很好的内置功能


9
投票

您似乎正在使用 Python,就好像它是 shell 一样。每当我需要做像你正在做的事情时,我都会使用 os.walk()

例如,正如here所解释的:

[x[0] for x in os.walk(directory)]
应该递归地为您提供所有子目录。


4
投票

列出当前目录中的条目 (

for directories in os.listdir(os.getcwd()):
),然后将这些条目解释为完全不同的目录 (
dir = os.path.join('/home/user/workspace', directories)
) 的子目录,这看起来很可疑。


0
投票

对 python3 进行轻微修正(与@RichieHindle 相同的答案)

这将打印数组中当前目录的所有子目录:

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

为了让上面的内容更容易阅读

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

如果您想要目录的完整路径名,请使用abspath:

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

请注意,这些代码片段只会获取直接子目录。

© www.soinside.com 2019 - 2024. All rights reserved.