在Python中存储字符串的好方法是什么?

时间:2014-03-08 22:23:13

标签: python json string csv text

我正在用Python构建一个会话机器人。虽然我想从头开始生成尽可能多的文本,但我仍然需要一种方法来编目和存储一堆对话框片段字符串。理想情况下,我想在字符串中包含某种层次结构/分类。 例如:

问候:

"Oh, nice to meet you {0}" "My name is Bob, how about you?"

调情:

"Stop it" "I'm blushing" "How flattering"

等...

虽然我可以将它们存储在数据库中,但是人们可以轻松地手动编辑不同的格式会很不错。 CSV? JSON?这样的事情有先例吗?

2 个答案:

答案 0 :(得分:8)

这取决于你想如何使用它。如果字符串仅供Python使用,则应考虑将它们存储在自己的.py文件中。是的,一个模块,但它也是一个简单的文本文件,可以由Python解释:)

许多项目使用.py文件作为配置文件(Django)并且导入其内容非常简单,因为您只需执行import answer_strings并且您已经在变量或类中获取它们。

您可以这样做:

#bot answers module

greetings = ["hello {0}", "what's up {0}"]
farewells = ["see you soon {0}", "nos vemos {0}"]
...

可以随机返回等效答案等。

另一方面,如果这些也是由Javascript,Java,node.js或者除了Python以外的任何技术读取的话,那么应该使用更通用的格式,JSON,XML,YAML,你可以命名它。 / p>

我认为这在文本文件(项目的资源)中比在数据库中更好,因为这样(如你所提到的)可以更加自定义。我还建议使用包含语义的格式。 CSV文件是IMHO 非常冷,只是一堆数据转储到文件中。使用XML,JSON等,您可以按照“问候”,“告别”等类别对数据进行分组。

不要忘记,因为您有多个选项,所以以模块化方式构建代码并解耦是非常好的。因此,如果您做出决定并且将来需要改变,那么它将尽可能无缝地完成。

希望这有帮助!

答案 1 :(得分:1)

这取决于您希望用字符串存储多少信息。

我认为对于一个简单的情况,当“数据库”只是字符串列表时,你可以使用纯文本,每行一个字符串。优点可能是这样的纯文本文件很容易使用GNU coreutils(如grep,sed ...)到GUI编辑器的大量工具进行搜索/编辑/操作。

使用预定义的文件命名和目录层次结构也可以轻松扩展。例如,像

这样的结构
data/
data/en_GB/greetings
data/en_GB/farewells
data/en_US/greetings
data/en_US/farewells
data/de_DE/greetings
data/de_DE/farewells

可以让您按语言选择数据,甚至在某些系统上只部署相关语言。

如果只有你的问题是换行符,你仍然可以使用某种垂直分隔符(例如~~~~)来逃避上述加号。


但是,如果您计划稍微复杂的结构和/或您希望它们发生变化,那么完整的序列化/标记语言可能会很有意义。我最喜欢的一个是YAML,它丰富,成熟,主要语言库不存在语言,人类容易理解和编辑(看看他们的网站:它在YAML!)。

# you can have comments for editors in YAML

# informal greetings are allowed
greetings:
    - "hello {0}"
    - "what's up {0}"

# bye, etc.
farewells:
    - "see you soon {0}"
    - "nos vemos {0}"

# please be polite here
flirtation:
    - "Stop it"
    - "I'm blushing"
    - "How flattering"