python中给csv替换数据_Python把csv数据写入list和字典类型的变量脚本方法
发布日期:2021-09-12 14:09:25 浏览次数:1 分类:技术文章

本文共 3922 字,大约阅读时间需要 13 分钟。

#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()

转载地址:https://blog.csdn.net/weixin_39545329/article/details/110396237 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:影子卫士和影子系统哪个好用_哪个重装系统软件好用,怎么用
下一篇:python雪花_python实现的雪花算法一枚

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月09日 05时17分13秒