2016-12-11 17 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 
    15 22 
    20 30 
    25 28 
    35 17 
    40 35 

データが別の列を追加し、ように見えるかもしれたまに:

一般
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 

、私のコードは正常に動作します。しかし、もし私が機能のようにしたいのであれば、それは機能していません。誰もが乱数を一緒にリストに追加する方法を知っていますか?

答えて

0

execを使用する必要はありませんが、実際にはとなるべくを使用してください。execを使用してください。あなたの番号を収集するために、多次元配列(配列の配列)を使用してください:

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']]] 

そして、第二のために:

[[['10', '15', '20', '25', '35', '40'], ['20', '22', '30', '28', '17', '35'], ['18', '21', '30', '28', '17', '32']]] 
関連する問題