分离配置文件并拆分密钥收集在自己的文件中

这个插件有一个新的更新,所以所有的“任务”都必须放在一个单独的文件中。因为有超过 100+ 我不想手动做。旧文件(“config.yml”)如下所示:“quests.{questname}.{attributes}”{attributes} 作为属于当前任务的每个键。新文件应以 {questname} 作为名称并在其中包含属性。这应该对所有文件进行。


config.yml(旧文件)


quests:

  farmingquest41:

    tasks:

      mining:

        type: "blockbreakcertain"

        amount: 100

        block: 39

    display:

      name: "&a&nFarming Quest:&r &e#41"

      lore-normal:

      - "&7This quest will require you to farm certain"

      - "&7resources before receiving the reward."

      - "&r"

      - "&6* &eObjective:&r &7Mine 100 brown mushrooms."

      - "&6* &eProgress:&r &7{mining:progress}/100 brown mushrooms."

      - "&6* &eReward:&r &a1,500 experience"

      - "&r"

      lore-started:

      - "&aYou have started this quest."

      type: "BROWN_MUSHROOM"

    rewards:

     - "xp give {player} 1500"

    options:

      category: "farming"

      requires:

       - ""

      repeatable: false

      cooldown:

        enabled: true

        time: 2880

我所做的是遍历数据中的每个“任务”,这会创建一个位于“任务/任务/{questname}.yml”中的带有任务属性的“输出文件”。但是,我似乎可以让它工作,得到一个“字符串索引必须是整数”。


import yaml


input = "Quests/config.yml"


def splitfile():

    try:

        with open(input, "r") as stream:

            data = yaml.load(stream)

            for quest in data:  

                outfile = open("Quests/quests/" + quest['quests'] + ".yml", "x")

                yaml.dump([quest], outfile)

    except yaml.YAMLError as out:

        print(out)


splitfile()

循环遍历数据中的每个“任务”,这将创建一个位于“任务/任务/{任务名称}.yml”中的具有任务属性的“输出文件”。


30秒到达战场
浏览 88回答 1
1回答

慕容708150

错误来自quest['quests']. 您的数据是一个字典,其中一个条目名为quests:for quest in data:   print(quest) # will just print "quests"要正确迭代您的 yaml,您需要:获取任务字典,使用data["quests"]对于 quests 字典中的每个条目,使用条目键作为文件名并转储文件中的条目值。这是您的脚本的修补版本:def splitfile():    try:        with open(input, "r") as stream:            data = yaml.load(stream)            quests = data['quests'] # get the quests dictionary            for name, quest in quests.items():                  # .items() returns (key, value),                 # here name and quest attributes                outfile = open("Quests/quests/" + name + ".yml", "x")                yaml.dump(quest, outfile)    except yaml.YAMLError as out:        print(out)splitfile()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python