2012-09-14 37 views

回答

11

没有什么阻止你创建自己的功能:

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 
+0

谢谢!我只是想确保这个功能还不是标准库的一部分。 –

+1

我希望有一个存在。你总是可以编辑'os.py';) – Blender

+0

好的解决方案!但'find .'也列出目录。该修复非常容易。 :) –

1

要么或isdir()/isfile()listdir()手动递归或者你可以使用subprocess.check_output()并调用find .。 Bascially os.walk()是最高级别,稍低一级是基于listdir()的半手动解决方案,并且如果您希望得到相同的输出find .会因为某种原因给予您与subprocess进行系统调用。

+0

+1'os.walk()'使用find程序本身的Python。 – Blender

0
import os 
path = "path/to/your/dir" 
for (path, dirs, files) in os.walk(path): 
    print files 

这是矫枉过正,还是我失去了一些东西?

+0

你是绝对正确的。它看起来比实际上更困难。 –

4

os.walk()没有任何手段矫枉过正。它可以生成你的文件和目录的列表在一个瞬间:

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

您可以在时间和存储安全变成一个发电机,仅处理一个路径。

+0

+1为最pythonic解决方案:) – kgr

1

您还可以通过使用sh

import sh 
text_files = sh.find(".", "-iname", "*.txt") 
相关问题