Python把csv数据写入list和字典类型的变量脚本方法
如下所示:
#coding=utf8 importcsv importlogging 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数据 ''' classGenExceptData(object): def__init__(self): try: #存放csv中读取的数据 self.mdbuffer=[] #打开csv文件,设置读的权限 csvHand=open("20170510174450.csv","r") #创建读取csv文件句柄 readcsv=csv.reader(csvHand) #把csv的数据读取到mdbuffer中 forrowinreadcsv: self.mdbuffer.append(row) #把数据穿件为为字典类型的 #self.readDataToList() #保存文件 exceptException,e: logging.error("ReadExcelerror:"+e) finally: #关闭csv文件 csvHand.close() defreadDataToList(self): try: #获取mdbuffer中的元素个数 rowNumber=len(self.mdbuffer) #设置当前行号 currentrow=1 #设置json数据的属性值 propertyJson={} #propertyJsonList=[] #count=0 #读取列表中的元素 dataList=[] try: forrowinrange(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是否相等 ifitem[0]==currentItem[0]anditem[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={} exceptException,e: logging.error("GetPropertyJsonError:"+e) print"GetPropertyJsonError:",e exceptException,e: logging.error("GetDateError:"+e) print"GetDateError:",e returndataList exceptException,e: logging.error("ReadingDataTODicError:"+e) print"ReadingDataTODicError:",e defgetAllServiceId(self): try: dataList=self.readDataToList() serList=[item["serviceId"]foritemindataListifitem["serviceId"]] serList=list(set(serList)) returnserList exceptException,e: logging.error("CreateServiceIdListError:"+e) print"CreateServiceIdListError:"+e defoupPutData(self): try: dataList=self.readDataToList() foritemindataList: print"{" forkey,valinitem.items(): printkey,":",val print"}" print"#"*50 exceptException,e: logging.error("OutPutDataError:"+e) print"OutPutDataError:"+e defcreateDataDic(self): try: dataDic={} dataList=self.readDataToList() count=0 foritemindataList: ifitem["serviceId"]==u"pageview": count+=1 printcount serviceIdList=self.getAllServiceId() iflen(serviceIdList)>0andlen(dataList)>0: forserviceIdinserviceIdList: sameServiceidJosnList=[] foritemindataList: itemServiceId=item["serviceId"] ifitemServiceId: ifserviceId==itemServiceId: sameServiceidJosnList.append(item) else: print"ServiceIdisnull" dataDic[serviceId]=sameServiceidJosnList else: print"seriviceIdListordataListisnull" returndataDic ''' forkey,valindataDic.items(): printkey,len(val) print"*"*50 foriteminval: print"{" forke,vainitem.items(): printke,":",va print"}" print"-"*50 ''' exceptException,e: print"CreateDataDictionaryError:",e deftest(): gen=GenExceptData() gen.oupPutData() if__name__=="__main__": test()
以上这篇Python把csv数据写入list和字典类型的变量脚本方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。