使用python获取文件夹内文件的完整递归列表的最简单方法是什么?我知道os.walk()
,但是仅仅获取所有文件的未过滤列表似乎有点过分了。它真的是唯一的选择吗?
问问题
11228 次
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 回答