在 python 中读取和排序 yaml 文件的行块
read and sort line block of yaml file in python
我正在尝试用 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)
还是我应该逐行读取文件?非常感谢。
我花了一些时间来研究它,并提出了以下解决方案:
#!/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)
非常感谢。
我正在尝试用 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)
还是我应该逐行读取文件?非常感谢。
我花了一些时间来研究它,并提出了以下解决方案:
#!/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)
非常感谢。