Python:如何返回os.walk返回的每个文件的父目录名称?

时间:2019-12-24 14:00:02

标签: python python-3.x

我正在尝试从os.walk找到的每个文件中以字符串形式返回目录名称,这是到目前为止的代码:

import os
def main():
    path = '/Users/Documents/GitHub/files'
    for dirpath, dirnames, filenames in os.walk(path):
        for x in filenames:
            print(os.path.dirname(os.path.abspath(x)))

if __name__ == "__main__":
     main()

我了解到os.path.dirname()os.path.basename()是将'path'传递到os.path.split()的相应结果,但是为什么当我使用os.path.abspath()时上述方法不起作用?

4 个答案:

答案 0 :(得分:2)

由于您将问题标记为python 3.x,因此您可能会发现pathlib库很有用。

from pathlib import Path

path = Path('/Users/Documents/GitHub/files')
for p in path.rglob("*"):
    if p.is_file():
        print(p.parent)

答案 1 :(得分:1)

您的代码显示每个x的当前目录,因为x只是一个文件名(没有其父目录,存储在dirpath中)。为什么不简单地print(dirpath)

如果这不能回答您的问题,您能给出预期的输出吗?

答案 2 :(得分:0)

据我了解,您需要在进入目录时打印每个文件吗? 对我来说,您的代码只需要打印root即可。 试试这个,让我知道它是否对您有帮助。

# Defined two function to print dir and file, then use for loop to walk in tree.
path = '/Users/Documents/GitHub/files'
def printfile(listdir, space):
    for file in listdir:
        print("/".rjust(space+1)+file)

def printdir(entrydir):
    print(entrydir[0])
    printfile(entrydir[2], len(entrydir[0]))

#wrap up 
tree = os.walk(path)
for dir in tree:
    printdir(dir)

答案 3 :(得分:0)

使用os.walklist comprehension的功能,这样的事情怎么样?

def get_dirnames(path) -> list:
    """Return a list of directories from the root path.

    Args:
        path (str): Full path to the starting directory.

    """
    dir_list = [os.path.join(root, d) for root, dirs, _ in os.walk(path) for d in dirs]
    return dir_list

这将从您的根路径输出以下内容:

import os

path = 'c:/users/bob/documents'
get_dirnames(path)

['c:/users/bob/documents\\Doc_Excel',
 'c:/users/bob/documents\\Doc_General',
 'c:/users/bob/documents\\Doc_Music',
 'c:/users/bob/documents\\Doc_PDF',
 'c:/users/bob/documents\\Doc_PowerPoint'
 ...]

如果这不是您想要的,请提供预期的输出,我们将看到我们将如何提供帮助。