13

使用python获取文件夹内文件的完整递归列表的最简单方法是什么?我知道os.walk(),但是仅仅获取所有文件的未过滤列表似乎有点过分了。它真的是唯一的选择吗?

4

6 回答 6

17

没有什么能阻止您创建自己的函数:

import os

def listfiles(folder):
    for root, folders, files in os.walk(folder):
        for filename in folders + files:
            yield os.path.join(root, filename)

你可以像这样使用它:

for filename in listfiles('/etc/'):
    print filename
于 2012-09-14T08:43:00.970 回答
12

os.walk()无论如何都不过分。它可以快速生成您的文件和目录列表:

files = [os.path.join(dirpath, filename)
    for (dirpath, dirs, files) in os.walk('.')
    for filename in (dirs + files)]

你可以把它变成一个生成器,一次只处理一个路径并且在内存上是安全的。

于 2012-09-14T08:45:07.693 回答
3

您还可以使用shfind从 Python 中使用程序本身

import sh
text_files = sh.find(".", "-iname", "*.txt")
于 2012-09-14T21:03:47.520 回答
1

要么使用isdir()/手动递归isfile()listdir()要么您可以使用subprocess.check_output()和调用find .. 基本上os.walk()是最高级别,略低的级别是基于半手动解决方案listdir(),如果您想要相同的输出find .,出于某种原因,您可以使用subprocess.

于 2012-09-14T08:36:50.827 回答
1

pathlib.Path.rglob很简单。它列出了整个目录树

(参数是文件路径搜索模式。"*"表示列出所有内容)

import pathlib


for path in pathlib.Path("directory_to_list/").rglob("*"):
    print(path)
于 2021-11-16T14:56:32.097 回答
0
import os
path = "path/to/your/dir"
for (path, dirs, files) in os.walk(path):
    print files

这是矫枉过正,还是我错过了什么?

于 2012-09-14T08:44:05.353 回答