我希望以递归方式搜索目录,只显示包含字符串"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)
答案 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)
我不知道你想如何在你的解决方案中实现它;即文件的数量和大小,但这里有两个注释:
如果您的文件很大,那么也许不是读取整个文件,而是逐步读取部分文件。
如果你有很多文件,那么可能会生成一个生成器函数,而不是返回所有文件名列表。