在python中,如何获取目录中所有文件的路径,包括子目录中的文件,但不包括子目录的路径

时间:2015-10-19 11:05:34

标签: python path os.walk

我有一个包含文件夹和子文件夹的目录。在每个路径的末尾都有文件。我想制作一个包含所有文件路径的txt文件,但不包括文件夹的路径。

我在Getting a list of all subdirectories in the current directory尝试了这个建议,我的代码如下:

import os

myDir = '/path/somewhere'

print [x[0] for x in os.walk(myDir)] 

它提供了所有元素(文件和文件夹)的路径,但我只想要文件的路径。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

os.walk(path)返回三个元组父文件夹,子目录和文件。

所以你可以这样做:

for dir, subdir, files in os.walk(path):
    for file in files:
        print os.path.join(dir, file)

答案 1 :(得分:0)

os.walk方法在每次迭代中为您提供目录,子目录和文件,因此当您循环遍历os.walk时,您必须遍历文件并将每个文件与“dir”组合。

要执行此组合,您要执行的操作是在目录和文件之间执行os.path.join

这是一个简单的例子来帮助说明如何遍历os.walk

from os import walk
from os.path import join

# specify in your loop in order dir, subdirectory, file for each level
for dir, subdir, files in walk('path'):
    # iterate over each file
    for file in files:
        # join will put together the directory and the file
        print(join(dir, file))

答案 2 :(得分:0)

如果您只想要路径,请按以下步骤为列表推导添加过滤器:

import os

myDir = '/path/somewhere'
print [dirpath for dirpath, dirnames, filenames in os.walk(myDir) if filenames] 

这只会添加包含文件的文件夹的路径。

答案 3 :(得分:0)

def get_paths(path, depth=None):
    for name in os.listdir(path):
        full_path = os.path.join(path, name)

        if os.path.isfile(full_path):
            yield full_path

        else:
            d = depth - 1 if depth is not None else None

            if d is None or d >= 0:
                for sub_path in get_paths(full_path):
                    yield sub_path