文档章节

Python读取yaml生成菜单

Firxiao
 Firxiao
发布于 2018/01/15 00:31
字数 397
阅读 190
收藏 5

需求:

每个location有对应的env, 每个env有对应的info

location1: dev:bar qa:foo uat:xxx
location2: dev:xxx qa:xxx

需要生成菜单,可以选择任意location中的env

Please choose location:
1: location1
2: location2
Enter your choice [1-2] : 1
1: dev
2: qa
3: uat
Enter your choice [1-3] : 2
You chosen location1 qa foo

思路及实现:

将配置信息存入配置文件中,在此选用yaml 利用python字典及列表的操作获取相应的值。

config.yml

location1:
  - env: dev
    info: bar
  - env: qa
    info: foo
  - env: uat
    info: xxx
location2:
  - env: dev
    info: xxx
  - env: qa
    info: xxx

menu.py

# -*- coding: utf-8 -*-
#author: firxiao
#date:20180115
#generate a menu from yaml config file.

import yaml
#读取配置文件 cfg为字典
with open("config.yml", 'r') as ymlfile:
    cfg = yaml.load(ymlfile)

print("Please choose location:")
#打印带序号排序过的字典
for i,location in enumerate(sorted(cfg)):
    print('%d: %s'% (i + 1,location))
#获取字典长度供菜单使用
lr = len(cfg)
choice = int(input('Enter your choice [1-%d] : ' % (lr)))

while True:
    if not choice: break
    # 将选项变为列表并根据输入序号选取
    location = list(sorted(cfg))[choice - 1]
    # 打印字典中key的value
    for i,d in enumerate(cfg[location]):
        print('%d: %s'% (i+1,d['env']))
    le = len(cfg[location])
    choice = int(input('Enter your choice [1-%d] : ' % (le)))
    # 同理,将选项转换为列表并取出相应的value
    print('You chosen %s %s %s'% (location,list(cfg[location])[choice - 1]['env'],list(cfg[location])[choice - 1]['info']))
    env = list(cfg[location])[choice - 1]['env']
    info = list(cfg[location])[choice - 1]['info']
    break

© 著作权归作者所有

共有 人打赏支持
Firxiao
粉丝 21
博文 100
码字总数 36715
作品 0
浦东
运维
私信 提问
用python变量作为配置文件格式的利与弊

用Python变量作为配置文件格式的利与弊 配置文件的格式非常多,有ini、xml、yaml等等,各有优点,适合不同的场景。然而,由于Python语言的解释性和动态性,给Python程序员带来了另一个选择:...

janzhen
2012/10/31
0
0
【自动化测试框架】 | 基于 selenium+Python,怎样从零开始搭建一个属于自己项目的测试框架

本框架是别人项目正在使用的框架,我这边抓取后经过了一点优化后整理出来的,大致包括,自动化用例套件、数据分离、日志模板、配置分离、断言、接口自动化、持续集成、自动化报告等方面,已经...

西边人
2018/06/15
0
0
01 python基础——python解析yaml类型文件

目录 一、yaml介绍 二、yaml文件格式 三、yaml文件读取 四、 使用案例 一、yaml介绍 yaml全称Yet Another Markup Language(另一种标记语言)。采用yaml作为配置文件,文件看起来直观、简洁、...

pangbianlaogu
2018/05/10
0
0
156个Python网络爬虫资源,妈妈再也不用担心你找不到资源了

本列表包含Python网页抓取和数据处理相关的库。 前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Pytho...

雁横
2018/05/02
0
0
python开源工具列表【持续更新】

以下是个人在工作中整理的一些python wheel,供参考。 这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库(基于pycurl)。...

武耀文
2018/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP接收前端传值各种情况整理

PHP接收前端传值各种情况整理 服务端代码: header('Access-Control-Allow-Origin:*');var_dump($_POST);exit; 情况 1) 传null $.post('http://xxxxx.xx/index.php', { "test": null}......

SSSWIIILLL
19分钟前
1
0
利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
今天
12
0
OSChina 周四乱弹 —— 我想过年请假提前回家两天

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 分享王力宏的单曲《爱错》 《爱错》- 王力宏 手机党少年们想听歌,请使劲儿戳(这里) @Caremorele :这几天起床有点...

小小编辑
今天
333
7
Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部