2016-12-11 4 views
0

내 데이터 집합에 임의의 크기가 있으므로 exec() 또는 eval()을 사용하여 데이터를 읽으려고합니다. 여기 내 코드입니다 :Python : 목록에서 매개 변수의 난수를 추가하는 방법

tim = [] 
var = [] 
for line in open(fid).readlines(): 
    str = line.split() 
    if line.find('/') >= 0: 
     tim.append(datetime.strptime(str[0]+str[1],'%Y/%m/%d%H:%M:%S')) 
     depth = int(str[2]) 
     num = 0 
    else: 
     if num == 0: 
      for i in range(len(str)): exec('var_%02d = []' %(i)) 
     for i in range(len(str)): exec('var_%02d.append(str[%d]) ' % (i,i)) 
     num += 1 
     if num == depth-1:    
      var.append([eval('var_%02d' % i) for i in range(len(str))]) 

같은 데이터의 형식은 다음과 같습니다

2010/01/01 00:00:00 6 2 
    10 20 18 
    15 22 21 
    20 30 30 
    25 28 28 
    35 17 17 
    40 35 32 

는 일반적으로, 내 코드가 잘 작동 : 가끔은 데이터가 다른 열을 추가하고 보이는 수

2010/01/01 00:00:00 6 2 
    10 20 
    15 22 
    20 30 
    25 28 
    35 17 
    40 35 

. 그러나 만약 내가 기능처럼한다면, 나는 작동하지 않는다. 아무도 목록에서 임의의 수의 매개 변수를 함께 추가하는 방법을 알고 있습니까?

답변

0

exec을 사용할 필요가 없습니다. 실제로는 이 아닙니다.exec입니다. 당신의 번호를 수집하는 다차원 배열 (배열의 배열)을 사용

[[['10', '15', '20', '25', '35', '40'], ['20', '22', '30', '28', '17', '35']]] 

을 그리고 초 :

tmp = [] 
tim = [] 
var = [] 
for line in open(fid).readlines(): 
    str = line.split() 
    if line.find('/') >= 0: 
     tim.append(datetime.strptime(str[0]+str[1],'%Y/%m/%d%H:%M:%S')) 
     depth = int(str[2]) 
     num = 0 
    else: 
     if num == 0: 
      for i in range(len(str)): 
       if len(tmp) <= i: 
        tmp.append([]) 
     for i in range(len(str)): 
      tmp[i].append(str[i]) 
     num += 1 
     if num == depth-1: 
      var.append([tmp[i] for i in range(len(str))]) 

print(var) 

를 데이터의 첫 번째 세트의 경우는 인쇄 할

[[['10', '15', '20', '25', '35', '40'], ['20', '22', '30', '28', '17', '35'], ['18', '21', '30', '28', '17', '32']]]