2009-08-13 45 views

回答

16

你会想使用os.walk这将使这个微不足道的。

import os 

asps = [] 
for root, dirs, files in os.walk(r'C:\web'): 
    for file in files: 
     if file.endswith('.asp'): 
      asps.append(file) 
+1

或'平均价格= [(如果在文件的文件的文件file.endswith ('.asp'))for _,__,os.walk(path)]中的文件],我认为这将是“Pythonic”的做法(尽管对于完全相同的东西它实际上只是略短一些的语法) 。 – 2009-08-13 21:01:03

+4

1衬里很不错,但在可读性方面并不完全是Pythonic。 – Unknown 2009-08-13 21:02:38

+0

这会递减目录但不存储文件的路径。 – hughdbrown 2009-08-13 22:12:41

3

走在树os.walk和内容过滤与glob

import os 
import glob 

asps = [] 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += glob.glob(os.path.join(root, '*.asp')) 

fnmatch.filter

import fnmatch 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += fnmatch.filter(files, '*.asp') 
+0

像os.path.join()。我想象OP会发现他需要完整的路径来找到找到的文件。 – hughdbrown 2009-08-13 22:01:42

+0

当我做了第二个解决方案时,它只是反复搜索同一个目录。我认为它需要这个: >>> asps = [] >>> p = r'C:\ temp' >>> for root,dirs,os.walk中的文件(p): ... asps + = fnmatch.filter([os.path.join(root,file)for file in files],“* .txt”) – hughdbrown 2009-08-13 22:09:26

+0

嗯,不太对。我在根目录下的多个目录中具有相同的文件。它看起来像重复搜索相同的目录,但不是。如果您的第一个解决方案与附加的路径一样,它仍然会更好。 – hughdbrown 2009-08-13 22:35:57

相关问题