Pages : 1
#1 Le 20/10/2016, à 17:55
- MINYA
Olap parser affichage cube
Bonjour,
Cela fait presque 3 heures que je me penche sur ce code, mais je n'arrive pas à comprendre, dès que je crois que j'ai compris, j'essaye de faire un bout de code pour juste afficher le contenu du cube, mais je n'y arrive pas! Voici le code en lui même
#!/usr/bin/python
#-*- coding: latin-1 -*-
"""
A simple implementation of a molap cube.
"""
from copy import copy
class MolapObject (dict):
"""
A MolapObject (étonnant non ?)
"""
def loadfromcsv(self,keys,stream):
"""
Load MolapObject from a csv line
"""
k=[keys,stream]
for j in range(len(k)):
k[j]=k[j].strip("\n")
k[j]=k[j].split(",")
k[j]=[x.strip('"') for x in k[j]]
for i in range(len(k[0])):
self[k[0][i]]=k[1][i]
def __str__(self):
"""
Print MolapObject to csv format
"""
me=""
# sorted keys for coherent results
s=self.keys()
s.sort()
for key in s:
me+='"'+self[key]+'",'
return me[:-1]
def affichage (self):
cube= new MolapObject
print cube
class MolapCube:
def __init__(self,molaps=[]):
self.molaps=molaps
def molapsfromcsv(self,file):
"""
Load an olap cube from a csv file
"""
f=open(file,'r')
oomolaps=[]
keys=f.readline()
line=f.readline()
while line!="":
o=MolapObject()
o.loadfromcsv(keys,line)
oomolaps.append(o)
line=f.readline()
self.molaps=oomolaps
def molapstocsv(self):
"""
Return a csv string from the data cube
"""
s=self.molaps[0].keys()
# sorted keys for coherent results
s.sort()
me=reduce(lambda x,y:x+","+y,map(lambda x: '"'+str(x)+'"',s))+"\n"
for x in self.molaps:
me+=str(x)+"\n"
return me
def sort(self,dimension):
"""
Return a list of MolapObjects sorted over one dimension
"""
list=copy(self.molaps)
list=map(lambda x:[x,x[dimension]],list)
for i in range(len(list)):
for j in range(len(list)):
if list[i][1]<list[j][1]:
temp=list[i]
list[i]=list[j]
list[j]=temp
return map(lambda x:x[0],list)
# your turn now !
# Careful: following prototypes are mostly wrong.
#def affichage(self):
#print (self.molaps)
def slice(self):
pass
def dice(self):
pass
def view2d(self):
pass
def pivot(self):
pass
def drilldown(self):
pass
def rollup(self):
pass
if __name__=="__main__":
import sys
cube=MolapCube()
# init
cube.affichage()
if len(sys.argv)<2:
print "Wrong input file.\nUsage : oomolap.py [afile.csv]"
else:
cube.molapsfromcsv(sys.argv[1])
#
#print "\n cube to csv \n"
#print cube.molapstocsv()
#
#print "\n sort over dimension 'lieu'\n"
#sorted=cube.sort('lieu')
#
Peace
Hors ligne
Pages : 1