2014-02-26 1 views
1

나는 각 줄에 사람의 ID 번호와 속성 집합이 들어있는 csv 파일을 가지고 있습니다. 나는 그들의 모든 속성을 포함하는 각각의 사람들을위한 튜플을 생성 할 수 있고 그 튜플의 이름을 그들의 ID #로 변형 할 수 있기를 원한다.재 지정을위한 동적 이름 지정 튜플

이러한 모든 튜플은 저장을 위해 다시 설정된 세트에 추가됩니다.

사람 ID #의 이름을 따서 명명 된 튜플을 만드는 방법을 알아낼 수 없습니다.

동적으로 변수 이름을 지정하는 것이 좋지만, 모든 튜플을 목록에 넣거나 설정하지 말고 다시 설정해야합니다 (필수 항목). 비효율적이고 성가신 것 같습니다.

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

것은 당신이 확장 수를 너의 q에 소원? 모든 사람들이 포함 된 집합을 만들려고하고 있습니까? –

+0

왜'csv' 모듈을 사용하지 않습니까? 그것은 당신의 CSV 파일에있는 모든 종류의 문법 이슈를 치는 것을 막을 것입니다. – CivFan

답변

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))  

당신은 각 사람이 최대 N 속성이있는 경우

+0

redis-py를 사용합니다. 이상적으로 나는 튜플의 이름을 personsID 다음에 지정하기를 원합니다. 따라서 ID가 101, 102 및 103 인 경우 튜플 이름을 101_tuple, 102_tuple 및 103_tuple로 지정해야합니다. 그리고 이것들을 redis set에 추가하십시오. 이것은 나중에 나중으로 돌아가 ID 번호로이 튜플을 추출 할 수 있습니다. 나는 이것에 대해 약간 새로운 것이므로 직렬화를 실제로 이해하지 못한다. 산 세척은 제가 위에서 설명한 것을 달성합니까? – StSh

+0

여기서 제공 한 추가 정보에 따라 예제를 업데이트했습니다. 당신은 redis에서 집합이나 목록을 사용할 필요가 없습니다. 단지 열쇠를 설정/가져올 수 있습니다. redis 문자열을 보내야하기 때문에'pickle'을 사용해야합니다. –

0

ID (5)의 사람과 관련된 튜플을 반환 getPerson(5)를 호출 할 수 있습니다, 해시 기반 언어에 독립적 인 솔루션이 있습니다. 여기에 사람의 값을 저장/읽기/삭제하기위한 3 가지 명령이 나와 있습니다.

  1. HMSET 'allpersonshash'personID 0 personID 1 ......
  2. HMGET '는 allpersonshash'personID 0 personID 1 personID 2 ... personID : N
  3. HDEL '를 allpersonshash 'personID : 0 personID : 1 personID : 2 ... personID : N
0

은 JSON의 모양과 정렬 된 세트를 사용하는 것입니다 할 수있는 매우 일반적인 방법, 예를 들면 :

ZADD userid, '{field1:value1,field2:value2}'