【问题标题】:Traverse to a specific string in a python code遍历python代码中的特定字符串
【发布时间】:2021-08-15 15:13:26
【问题描述】:

以下是 YAML 文件的内容。我想编写一个python代码以遍历特定的案例名称,然后将启用的值从true更改为false。例如:遍历登录案例名称,然后将启用值更改为 false。我该怎么做?

tiers:
-
    name: testing
    order: 1
    description: ''
    testcases:
        -
            case_name: console_access
            project_name: project
            enabled: true
            criteria: 100
            blocking: false
            clean_flag: false
            description: ''
            run:
                name: 'console_access'

        -
            case_name: login
            project_name: project
            enabled: true
            criteria: 100
            blocking: false
            clean_flag: false
            description: ''
            run:
                name: 'login'

        -
            case_name: project_creation
            project_name: project
            enabled: true
            criteria: 100
            blocking: false
            clean_flag: false
            description: ''
            run:
                name: 'project_creation'

        -
            case_name: network_creation
            project_name: project
            enabled: true
            criteria: 100
            blocking: false
            clean_flag: false
            description: ''
            run:
                name: 'network_creation'

【问题讨论】:

  • 尝试使用pyYAML
  • @leminhnguyenHUST 嘿.. 能否请您简要介绍一下如何编写 Python 代码?
  • @Oshinaggrawal 您发布的数据中似乎没有“horizo​​n_login”case_name。
  • @norie 嘿,对不起.. 案例名称:登录

标签: python python-3.x yaml


【解决方案1】:

正如建议的那样,您可以使用PyYAML

现在假设您将 YAML 放在一个名为 cases.yaml 的文件中。

然后您可以使用此代码读取数据并进行所需的更改。

请注意,此代码写入名为 new_cases.yaml 的新文件,但可以轻松更改为写回原始文件。

import yaml

with open('cases.yaml') as file:
    case_list = yaml.load(file, Loader=yaml.FullLoader)
    for case in case_list['tiers'][0]['testcases']:
      if case['case_name'] == 'login':
        case['enabled'] = False

with open('new_case.yaml', 'w') as file:
    documents = yaml.dump(case_list, file)

【讨论】:

  • 是否可以提供多个 case_name ?
  • 你到底是什么意思?
  • 在这一步: if case['case_name'] == 'login': 我可以提到一个或多个 case_name @norie
  • 嘿@norie .. 你能回答上面的问题吗?
  • 您有想要查找的案例名称列表吗?
【解决方案2】:
import yaml

y = yaml.safe_load(open("data.yaml", "r")) 

for i in y["tiers"]:
    for j in i["testcases"]:
        if j["case_name"] == "login":
            j["enabled"] = False

yaml.dump(y, open("new_data.yaml", "x"))

【讨论】:

  • 是否可以提供多个 case_name ?
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 2015-06-17
  • 2021-10-02
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多