- #coding=utf8
- import csv
- import logging
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
- datefmt='%a, %d %b %Y %H:%M:%S',
- filename='readDate.log',
- filemode='w')
- '''''
- 该模块的主要功能,是根据已有的csv文件,
- 通过readDataToDicl函数,把csv中对应的部分,
- 写入字典中,每个字典当当作一条json数据
- '''
- class GenExceptData(object):
- def __init__(self):
- try:
- #存放csv中读取的数据
- self.mdbuffer=[]
- #打开csv文件,设置读的权限
- csvHand=open("20170510174450.csv","r")
- #创建读取csv文件句柄
- readcsv=csv.reader(csvHand)
- #把csv的数据读取到mdbuffer中
- for row in readcsv:
- self.mdbuffer.append(row)
- #把数据穿件为为字典类型的
- #self.readDataToList()
- #保存文件
- except Exception,e:
- logging.error("Read Excel error:"+e)
- finally:
- #关闭csv文件
- csvHand.close()
- def readDataToList(self):
- try:
- #获取mdbuffer中的元素个数
- rowNumber=len(self.mdbuffer)
- #设置当前行号
- currentrow=1
- #设置json数据的属性值
- propertyJson={}
- #propertyJsonList=[]
- #count=0
- #读取列表中的元素
- dataList=[]
- try:
- for row in range(1,rowNumber):
- #创建一个临时变量用来存取一次循环的属性键值
- temp={}
- #获取列表中一个元素
- item=self.mdbuffer[row]
- #获取当前元素,当前元素代表的是每个
- #事件起始的位置
- currentItem=self.mdbuffer[currentrow]
- #获取serviceId并进行解码
- serviceId= currentItem[2].decode("gbk")
- #获取属性并进行解码,把解码的值存入propertyName
- propertyName=item[3].decode("gbk")
- #获取属性值并进行解码,把解码的值存入propertyValue
- propertyValue=item[4].decode("gbk")
- try:
- #判断埋点事件与serviceId是否相等
- if item[0]==currentItem[0] and item[2]==currentItem[2]:
- #把serviceId方式字典propertyJson中
- propertyJson["serviceId"]=serviceId
- #把属性/值对放入temp字典中
- temp[propertyName]=propertyValue
- #调用字典的update函数,把temp中的键值对
- #添加到 propertyJson字典中
- propertyJson.update(temp)
- #使用continue,如果为if条件为true则循环执行if语句模块
- continue
- else:
- #把行号设置为当前行
- currentrow=row
- #把当前的属性解码放入propertyName
- propertyName=currentItem[3].decode("gbk")
- #把当前的属性值解码放入propertyName
- propertyValue=currentItem[4].decode("gbk")
- #把serviceId方式字典propertyJson中
- propertyJson["serviceId"]=serviceId
- #把属性/值对放入propertyJson字典中
- propertyJson[propertyName]=propertyValue
- #propertyJsonList.append(propertyJson)
- dataList.append(propertyJson)
- '''''
- 在这说下:
- propertyJson.clear()与propertyJson={}的区别:
- propertyJson.clear()是删除字典的值,不创建引用,会改变字典本身的值;
- propertyJson={}是创建新的引用,字典的中的值不发现变化;
- 如果想让 self.dataDic.append(propertyJson)该语句执行成功,而且添加每次循环的值,
- 需要使用propertyJson={}方法;
- 如果使用propertyJson.clear(),只会把最后一次propertyJson存储的值,添加到self.dataDic中
- '''
- propertyJson={}
- except Exception,e:
- logging.error("Get Property Json Error:"+e)
- print "Get Property Json Error:",e
- except Exception,e:
- logging.error("Get Date Error:"+e)
- print "Get Date Error:",e
- return dataList
- except Exception,e:
- logging.error("Reading Data TO Dic Error:"+e)
- print "Reading Data TO Dic Error:",e
- def getAllServiceId(self):
- try:
- dataList=self.readDataToList()
- serList=[item["serviceId"] for item in dataList if item["serviceId"] ]
- serList=list(set(serList))
- return serList
- except Exception,e:
- logging.error("Create ServiceId List Error:"+e)
- print "Create ServiceId List Error:"+e
- def oupPutData(self):
- try:
- dataList=self.readDataToList()
- for item in dataList:
- print "{"
- for key,val in item.items():
- print key,":",val
- print "}"
- print "#"*50
- except Exception,e:
- logging.error("OutPut Data Error:"+e)
- print "OutPut Data Error:"+e
- def createDataDic(self):
- try:
- dataDic={}
- dataList=self.readDataToList()
- count=0
- for item in dataList:
- if item["serviceId"]==u"pageview":
- count+=1
- print count
- serviceIdList=self.getAllServiceId()
- if len(serviceIdList)>0 and len(dataList)>0:
- for serviceId in serviceIdList:
- sameServiceidJosnList=[]
- for item in dataList:
- itemServiceId=item["serviceId"]
- if itemServiceId:
- if serviceId==itemServiceId:
- sameServiceidJosnList.append(item)
- else:
- print "ServiceId is null"
- dataDic[serviceId]=sameServiceidJosnList
- else:
- print "seriviceIdList or dataList is null"
- return dataDic
- '''''
- for key,val in dataDic.items():
- print key,len(val)
- print "*"*50
- for item in val:
- print "{"
- for ke,va in item.items():
- print ke,":",va
- print "}"
- print "-"*50
- '''
- except Exception,e:
- print "Create Data Dictionary Error:",e
- def test():
- gen =GenExceptData()
- gen.oupPutData()
- if __name__=="__main__":
- test()