这个插件有一个新的更新,所以所有的“任务”都必须放在一个单独的文件中。因为有超过 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 yamlinput = "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”中的具有任务属性的“输出文件”。
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
错误来自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()
添加回答
举报
0/150
提交
取消