我最近发现了YAML,它已成为我的项目(我正在创建一个基于文本的RPG)的奇妙格式。它可以完美地处理我需要的所有东西 - 区域文件(带有descs,exits,objs,npcs等的房间),脚本文件,npc文件,目标文件......它可以解决所有问题!只有一件事...我不喜欢“yaml.dump()”如何保存它的文件。有其他选择吗?
当更新这些文件中的值时,我当然需要将它们写回磁盘以保持更改。不幸的是,YAML的dump()
方法真的让事情变得糟糕。首先,它将所有关键字按字母顺序排列,然后每行显示一个k:v对。这有效地采用了5行文件并将其转换为94行。
我试着写的用write()
的YAML对象回盘,但它抛出
TypeError: expected a character buffer object
我。 Pickle会保存它,但我认为这会破坏数据的YAML性。没有dump()
保存YAML对象的好方法吗?我听说过SQLite,它的工作原理和YAML一样吗?我几乎没有数据库的经验,但似乎YAML对象基本上是数据库。值得使用SQLite重新编码所有东西吗?与我现在遇到的问题不同,用它保存更改后的值是否容易?
这里的任何帮助将是伟大的。我非常喜欢YAML。我努力寻找一种方法来存储我游戏所需的所有数据,并且当我发现YAML时,它好像闪耀着神圣的光芒,就像天使的合唱团唱着它们的荣耀 - 所以你可以理解如果我首先想知道如何在不使用dump()
的情况下将YAML数据保存到磁盘。如果没有,建议表示赞赏!
但是,这不是问题。 YAML非常适合以可读格式存储数据。一旦你加载了它,你就拥有本地Python数据结构,因此比任何数据库都能以更快的速度访问内存。当数据无法一次存储在内存中时,数据库会赢。 – delnan 2011-04-01 13:45:24
我检查了几个关于Python中SQLite的vids,看起来好像有很多东西要学习这条路线。我遇到的唯一问题是它可能会暂停我的进步。但是,看起来它可能比简单访问2d字典对象更强大。数据库比YAML要慢多少?如果说我在一个数据库中映射了一个区域,其中每行包含该区域中一个房间所需的全部数据,并且有50个房间,那么它真的会很慢吗? – 2011-04-01 15:31:30
数据库通常应该比YAML更快,因为涉及的字符串处理会更少(但这取决于您设计DB结构的程度) – ncoghlan 2011-04-01 18:06:19