问题描述
我正在使用pyyaml
读取yaml文件,并在yaml文件中查找特定属性,并在列表中获取其所有值。
我已经将dict设置为value,对于每个prop值,我都将尊重的yaml文件添加到set中,所以dict会像这样循环:
prop1 => yaml1,yaml2,prop2 => yaml3,prop3 => yaml4,yaml1 etc...
我正在循环中填充dict,但是一旦完成所有yaml文件的读取,然后从外循环返回dict就会始终将其返回为空dict。
代码段:
def populate_records():
records_map = defaultdict(set)
path = 'abc/xyz'
pattern = '*.yaml'
prop_key = "abc::def"
files = glob.glob(path + os.sep + pattern)
for filename in files:
f_name = os.path.basename(filename).rsplit(".",1)[0]
with open(filename,'r') as f:
node = yaml.load(f)
if node is not None:
for property_name in node:
if prop_key == property_name:
prop_list = node[property_name]
break
for prop in prop_list:
records_map[prop].add(f_name)
return records_map
任何人都可以帮助我找出以上代码的问题吗?
解决方法
我设法修复了它,它在列表上抛出了空指针异常,并且由于此dict总是返回为空。
工作代码:
def populate_records():
records_map = defaultdict(set)
path = 'abc/xyz'
pattern = '*.yaml'
prop_key = "abc::def"
files = glob.glob(path + os.sep + pattern)
for filename in files:
f_name = os.path.basename(filename).rsplit(".",1)[0]
with open(filename,'r') as f:
node = yaml.load(f)
if node is not None:
for property_name in node:
if prop_key == property_name:
prop_list = node[property_name]
if prop_list is None:
break
for prop in prop_list:
records_map[prop].add(f_name)
break
return records_map