我正在尝试使用python对yaml文件进行排序,如下所示:
........
........
........
# comment
ip address/20:
datacenter: x
context: y
# comment
ip address/32:
datacenter: a
context: b
# comment
ip address/24:
datacenter: x
context: z
# comment
ip address/16:
datacenter: a
context: b
........
........
........
文件很长。我可以用python读取文件,但是我想根据CIDR表示法对输出块进行排序:
........
........
........
# comment
ip address/16:
datacenter: a
context: b
# comment
ip address/20:
datacenter: x
context: y
# comment
ip address/24:
datacenter: x
context: z
# comment
ip address/32:
datacenter: a
context: b
........
........
........
在阅读文件时有没有办法做到这一点:
import yaml
with open("file.yml", 'r') as stream:
try:
print(yaml.load(stream))
except yaml.YAMLError as err:
print(err)
或者我应该逐行阅读文件?非常感谢。
答案 0 :(得分:2)
我有时间研究它,我想出了以下解决方案:
#!/usr/bin/env python3
import yaml
#from functools import reduce
with open("sprd_variator.yml", 'r') as input_file:
try:
dict = yaml.load(input_file)
i = 'networks'
if i in dict:
sorted_sub = sorted(dict[i].items())
sorted_sub_keys = sorted(dict[i].keys())
sorted_sub_keys.sort(key = lambda x: int(x.rsplit('/',2)[1]))
networks = []
for x in sorted_sub_keys:
facters = [item for item in sorted_sub if item[0] == x]
networks.append(facters)
one_list = [item for sublist in networks for item in sublist]
#one_list = reduce(lambda x,y: x+y,networks)
print(one_list)
else:
print('error')
except yaml.YAMLError as err:
print(err)
非常感谢。