Python以递归方式搜索目录,仅显示包含特定字符串的文件

时间:2017-12-24 00:22:21

标签: python python-2.7

我希望以递归方式搜索目录,只显示包含字符串"AWSTemplateFormatVersion"的文件。

import os, json

cfn = [".json", ".template", ".yaml", ".yml"]
dir = "./janitor"

def cloudFormation(dir):
    for root, dirs, files in os.walk(dir):
        for file in files:
            if file.endswith(tuple(cfn)):
                with open(os.path.join(root, file), 'r') as fin:
                    data = fin.read()
                    print("************ Break **************")
                    print(data)
                    print(os.path.join(root, file))
    return data

if __name__ == "__main__":
    cloudFormation(dir)

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样?正如MikeMüller在评论中建议的那样,测试data中的事件。此外,我没有打印最后 data值,而是更改了代码以返回条件为true的所有文件的列表:

import os, json

cfn = [".json", ".template", ".yaml", ".yml"]
dir = "./janitor"

def cloudFormation(dir):
    files_with_string = []
    for root, dirs, files in os.walk(dir):
        for file in files:
            if file.endswith(tuple(cfn)):
                with open(os.path.join(root, file), 'r') as fin:
                    data = fin.read()
                    if "AWSTemplateFormatVersion" in data:
                        files_with_string.append(os.path.join(root, file))
                        print("************ Break **************")
                        print(data)
                        print(os.path.join(root, file))
    return files_with_string 

if __name__ == "__main__":
    cloudFormation(dir)

我不知道你想如何在你的解决方案中实现它;即文件的数量和大小,但这里有两个注释:

如果您的文件很大,那么也许不是读取整个文件,而是逐步读取部分文件。

如果你有很多文件,那么可能会生成一个生成器函数,而不是返回所有文件名列表。