我有一个csv文件,其中每行包含一个人的ID#,然后是一堆属性。我希望能够为每个包含所有属性的人创建一个元组,然后将元组命名为ID#的一些变体。
然后将所有这些元组添加到redis中的一组用于存储。
我似乎无法弄清楚如何创建以人员ID#命名的元组。
我知道动态命名变量不是最好的做法,但我宁愿不把所有元组放在列表中或设置为然后放入redis集(这是必须的);它似乎效率低下且繁琐。
这是我现在的代码:
with open('personlist.csv','rb') as f:
for line in f:
row = line.split(',')
personID = row[0]
attrb1 = row[1]
attrb2 = row[2]
attrb3 = row[3]
# Need to name tuple here and define as (attrb1, attrb2, attrb3)
r.lpush('allpersonslist',tuple)
答案 0 :(得分:0)
此示例需要额外的代码才能运行。我假设您使用的是Redis-py之类的redis API。变量r
是与redis的开放连接。
import pickle
with open('personlist.csv', 'rb') as f:
for line in f:
row = line.split(',')
personID = row[0]
attrb1 = row[1]
attrb2 = row[2]
attrb3 = row[3]
#put the attributes in a tuple
tuple = (attrb1, attrb2, attrb3)
#serialize the tuple before adding it to the set
r.set("person/%d" %personID,pickle.dumps(tuple,-1))
def getPerson(Id):
return pickle.loads(r.get("person/%d" %Id))
您可以致电getPerson(5)
以返回与ID为5的人相关联的元组。
答案 1 :(得分:0)
如果每个人都有最大N属性,则基于哈希的语言无关解决方案。这里列出了3个用于保存/读取/删除人员值的命令。
答案 2 :(得分:0)
一种相当普遍的方法是使用带有json blob的有序集,例如:
ZADD userid, '{field1:value1,field2:value2}'