我从用户那里得到一些输入作为字符串列表,即:
['a','b','c','d']
字符串可以是" hat"一篇短文。我需要将此列表作为字符串存储在我的数据库中,并将该字符串拉出并稍后将其转回列表。有关最安全/最快方法的建议吗?到目前为止,我已经考虑过了:
答案 0 :(得分:2)
您想要做的就是将列表序列化为文件。
pickle
module允许您轻松完成此操作。
以下是一个例子:
import pickle
data = ['a', 'b', 'c', 'd']
with open('myfile.txt', 'wb') as f:
pickle.dump(data, f)
with open('myfile.txt', 'rb') as f:
read_data = pickle.load(f)
print read_data
如果您想将列表推送到Neo4J
数据库,则必须使用Python clients library之一。
我将演示如何使用Py2neo:
from py2neo import Node
list1 = Node("DataList", name="list1")
list1.properties['val'] = ['a', 'b', 'c', 'd']
list1.push()
当然,这是非常浅的方式,可能你会以不同的方式做到这一点 - 取决于你想要实现的目标。
答案 1 :(得分:2)
到目前为止,我的偏好是msgpack(和xml)。它具有与protocol.dumps
类似的规范接口protocol.loads
/ json
,并支持类似于json
和其他打包库的所有Python基类型。
json
可读,很多工具,例如jsonselect或PostgreSQL。
pickle
方便 复杂python类型/类 #lazy
msgpack
是高效率的&太空明智。您可以轻松地将其与json交换,并且它不会“膨胀”。它适用于utf-8。
csv
确定。它比json更紧凑,并且在#security控制下易于解析。它可以节省一些CPU cyles&带宽。默认情况下,它不支持嵌套列表。
xml
是可移植的,详细的验证框架使其更易于理解。它有很多工具。
使用较长的分隔符字符串
这看起来像使用“罕见”字符,它可以打破。如果这很重要,那么漫长的事情就会使它成为一种性能负担。
Neo4j的
由于您使用的是Neo4J,最好使用json以便更轻松地与资源管理器兼容。
提示:永远不要在协议中使用list
,最好有最小的可能消息,但是当出现错误时,所有代码都不可读或混乱。向后兼容性是一种负担。我更喜欢dict
来表示对象,而list
来表示真实列表或set
对象。 使用字典允许应用程序/协议自我文档。 HTTP 1.x就是这样做的。
答案 2 :(得分:1)
如果要直接序列化为字符串,可以使用pickle.dumps
:
import pickle
L = ['a','b','c','d']
pickle.dumps(L)
b'\x80\x03]q\x00(X\x01\x00\x00\x00aq\x01X\x01\x00\x00\x00bq\x02X\x01\x00\x00\x00cq\x03X\x01\x00\x00\x00dq\x04e.'