函数遍历目录YAML文件时,print输出全部值但return仅返回单个值的问题
问题分析与解决方案
嘿,这问题我太熟啦!你的函数里return语句放在了for循环内部,这就是为啥只能返回单个值的原因——只要return被执行,函数就会立刻终止运行,循环还没来得及处理后面的文件就直接退出了,自然只能拿到第一个文件的结果。
咱们来改改代码:
首先,先创建一个空列表用来存储所有提取到的collection name,然后在循环里把每个结果添加到列表中,等所有文件都处理完之后,再一次性返回整个列表:
import os import yaml def return_yml_file_names(): """return file names from the yaml directory""" collections = os.listdir('yaml/') collections.remove('export_config.yaml') # 初始化空列表存储结果 collection_names = [] for file in collections : with open('yaml/' + file, 'r') as f: # 建议用safe_load替代load,避免安全风险 doc = yaml.safe_load(f) collection_name = doc["config"]["collection"] + ".json" # 将结果添加到列表,而不是直接return collection_names.append(collection_name) # 循环结束后返回整个列表 return collection_names # 调用函数并打印所有结果 results = return_yml_file_names() for name in results: print(name)
另外还要提醒你:yaml.load()存在安全隐患,可能会执行恶意代码,所以尽量用yaml.safe_load()来替代,这是更安全的做法哦。
现在运行修改后的代码,就能得到所有YAML文件里提取的collection name啦~
内容的提问来源于stack exchange,提问作者spark dev
相关产品推荐
相关产品推荐

