Python把csv中的数据整合成多条json数据插入列表的脚本

来源:互联网 发布:ubuntu 花屏 编辑:程序博客网 时间:2024/06/06 18:48

数据格式:


根据上图,要把相同serviceId和property_name、proterty_value这三个值,糅合在一起组成一个json数据;同时相同的serviceId行糅合在一起。例如:serviceId为click的,整合成的类似与数据格式如下:

{srcPage: 声音编辑页function :saveTitleAlbumserviceId : clicksrcModule :保存}
把糅合成这样的数据插入一张list中。

propertyJson.clear()与propertyJson={}的区别

propertyJson.clear()与propertyJson={}的区别:
propertyJson.clear()是删除字典的值,不创建引用,会改变字典本身的值;
propertyJson={}是创建新的引用,字典的中的值不发现变化;
如果想让 self.dataDic.append(propertyJson)该语句执行成功,而且添加每次循环的值, 需要使用propertyJson={}方法; 如果使用propertyJson.clear(),只会把最后一次propertyJson存储的值,添加到self.dataDic中

代码如下:

#coding=utf8import csv '''该模块的主要功能,是根据已有的csv文件,通过readDataToDicl函数,把csv中对应的部分,写入字典中,每个字典当当作一条json数据'''class GenExceptData(object):    def __init__(self):        try:            #用来存放json数据的列表            self.dataDic=[]            #存放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.readDataToDicl()            #保存文件        except Exception,e:            print "Read Excel  error:",e        finally:            #关闭csv文件            csvHand.close()      def readDataToDicl(self):        try:            #获取mdbuffer中的元素个数            rowNumber=len(self.mdbuffer)            #设置当前行号            currentrow=1            #设置json数据的属性值            propertyJson={}            #propertyJsonList=[]            #count=0            #读取列表中的元素                  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")                #判断埋点事件与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)                     self.dataDic.append(propertyJson)                    '''                        输入字典中的值,并对值进行解码                    该部分用于调试使用                     #for key,val in propertyJson.items():                        #print key,"=",val.encode("utf8")                    #print "#"*50                    '''                    #为下次做准备,把字典设为空                    '''                    在这说下:                    propertyJson.clear()与propertyJson={}的区别:                    propertyJson.clear()是删除字典的值,不创建引用,会改变字典本身的值;                    propertyJson={}是创建新的引用,字典的中的值不发现变化;                    如果想让 self.dataDic.append(propertyJson)该语句执行成功,而且添加每次循环的值,                    需要使用propertyJson={}方法;                    如果使用propertyJson.clear(),只会把最后一次propertyJson存储的值,添加到self.dataDic中                    '''                    propertyJson={}                                                                          for item in self.dataDic:                     for key,val in item.items():                        print key,"=",val.encode("utf8")                print "#"*50                                     except Exception,e:            print "Reading Data TO Dic Error:",e        def test():    GenExceptData()    if __name__=="__main__":    test()

运行结果如下:


阅读全文
0 0