文章内容

2017/9/19 16:20:42,作 者: 黄兵

Python把对应格式的csv文件转换成字典类型存储脚本

为了结合之前的编写的脚本,来实现数据的比对模块,实现数据的自动化!由于数据格式是定死的,该代码只做参考,有什么问题可以私信我!

CSV的数据格式截图如下:

readDataToDic.py源代码如下:

  1. #coding=utf8  
  1. import csv   
  1. ''''' 
  1. 该模块的主要功能,是根据已有的csv文件, 
  1. 通过readDataToDicl函数,把csv中对应的部分, 
  1. 写入字典中,每个字典当当作一条json数据 
  1. '''  
  1. class GenExceptData(object):  
  1.     def __init__(self):  
  1.         try:  
  1.             #用来存放json数据的字典  
  1.             self.dataDic={}  
  1.             #存放csv中读取的数据  
  1.             self.mdbuffer=[]  
  1.             #打开csv文件,设置读的权限  
  1.             csvHand=open("20170510174450.csv","r")  
  1.             #创建读取csv文件句柄  
  1.             readcsv=csv.reader(csvHand)  
  1.             #把csv的数据读取到mdbuffer中  
  1.             for row in readcsv:  
  1.                     self.mdbuffer.append(row)    
  1.             #把数据穿件为为字典类型的  
  1.             self.readDataToDicl()  
  1.             #保存文件  
  1.         except Exception,e:  
  1.             print "Read Excel  error:",e  
  1.         finally:  
  1.             #关闭csv文件  
  1.             csvHand.close()  
  1.     
  1.     def readDataToDicl(self):  
  1.         try:  
  1.             #获取mdbuffer中的元素个数  
  1.             rowNumber=len(self.mdbuffer)  
  1.             #设置当前行号  
  1.             currentrow=1  
  1.             #设置json数据的属性值  
  1.             propertyJson={}  
  1.             #读取列表中的元素        
  1.             for row in range(1,rowNumber):  
  1.                 #创建一个临时变量用来存取一次循环的属性键值  
  1.                 temp={}  
  1.                 #获取列表中一个元素  
  1.                 item=self.mdbuffer[row]  
  1.                 #获取当前元素,当前元素代表的是每个  
  1.                 #事件起始的位置  
  1.                 currentItem=self.mdbuffer[currentrow]  
  1.                 #获取serviceId并进行解码  
  1.                 serviceId= currentItem[2].decode("gbk")  
  1.                 #获取属性并进行解码,把解码的值存入propertyName  
  1.                 propertyName=item[3].decode("gbk")  
  1.                 #获取属性值并进行解码,把解码的值存入propertyValue  
  1.                 propertyValue=item[4].decode("gbk")  
  1.                 #判断埋点事件与serviceId是否相等  
  1.                 if item[0]==currentItem[0and item[2]==currentItem[2]:  
  1.                     #把serviceId方式字典propertyJson中  
  1.                     propertyJson["serviceId"]=serviceId   
  1.                     #把属性/值对放入temp字典中                                                   
  1.                     temp[propertyName]=propertyValue  
  1.                     #调用字典的update函数,把temp中的键值对  
  1.                     #添加到 propertyJson字典中  
  1.                     propertyJson.update(temp)  
  1.                     #使用continue,如果为if条件为true则循环执行if语句模块  
  1.                     continue    
  1.                 else:  
  1.                     #把行号设置为当前行  
  1.                     currentrow=row    
  1.                     #把当前的属性解码放入propertyName                      
  1.                     propertyName=currentItem[3].decode("gbk")  
  1.                     #把当前的属性值解码放入propertyName  
  1.                     propertyValue=currentItem[4].decode("gbk")  
  1.                     #把serviceId方式字典propertyJson中   
  1.                     propertyJson["serviceId"]=serviceId      
  1.                     #把属性/值对放入propertyJson字典中    
  1.                     propertyJson[propertyName]=propertyValue   
  1.                     #输入字典中的值,并对值进行解码  
  1.                     #该部分用于调试使用   
  1.                     for key,val in propertyJson.items():  
  1.                         print key,"=",val.encode("utf8")  
  1.                     print "#"*50   
  1.                     #为下次做准备,清除字典中的元素  
  1.                     propertyJson.clear()  
  1.                                
  1.         except Exception,e:  
  1.             print "Reading Data TO Dic Error:",e  
  1.           
  1. def test():  
  1.     GenExceptData()  
  1.       
  1. if __name__=="__main__":  
  1.     test()  

分享到:

发表评论

评论列表