我有一个主目录,名为Forfun。在这个目录中,有7-8个子目录,如Test1、Test2、Test3等.注意,在中也有一些文件不是子目录.例如,.txt文件位于与Test1、Test2子目录相同级别的Forfun中。
每个TestX子目录被进一步划分为3个子目录,即:inputs、results和parameters。
我希望能够列出一个特定文件夹的所有实例,比如inputs。
代码应该递归地遍历整个Forfun目录,并列出它找到的所有输入、或结果目录。
我试着像这样使用os.listdir:
path = '/myfiles/Forfun'
folders = [f for f in os.listdir(path) if f.endswith('inputs')]
folders 但这会给我一个空的列表。希望我能把问题解释清楚,谢谢你的帮助。
发布于 2012-05-21 12:30:17
os.listdir()列出了提供目录中的所有文件和目录。正如您所经历的,它不执行递归。它停留在最初提供的目录的级别上。
为了递归地遍历目录树并遍历特定目录级别下的所有文件和目录,您应该使用os.walk()
import os
def listdirs(suffix):
for dirname, dirnames, filenames in os.walk('.'):
for subdirname in dirnames:
subdirpath = os.path.join(dirname, subdirname)
if subdirpath.endswith(suffix):
yield subdirpath
if __name__ == "__main__":
for d in listdirs('inputs'):
print d我已经设置了和你建议的目录结构相同的目录结构。这是上面代码的输出:
$ python test.py
./Test1/inputs
./Test2/inputs发布于 2012-05-21 12:37:17
要准确地说,Jan-Philip的解决方案是:
>>> import os
>>> for root, dirs, files in os.walk(path):
if 'inputs' in dirs:
print os.path.join(root, 'inputs')它将列出所有出现的inputs子文件夹。
https://stackoverflow.com/questions/10685211
复制相似问题