Python把csv数据写入list和字典类型的变量脚本方法


Posted in Python onJune 15, 2018

如下所示:

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

以上这篇Python把csv数据写入list和字典类型的变量脚本方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于queue和threading实现多线程下载实例
Oct 08 Python
python正则表达式的使用
Jun 12 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python 读取数据库并绘图的实例
Dec 03 Python
python实现图像拼接
Mar 05 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python如何急速下载第三方库详解
Nov 02 Python
Python对象属性自动更新操作示例
Jun 15 #Python
numpy使用fromstring创建矩阵的实例
Jun 15 #Python
详解Python 协程的详细用法使用和例子
Jun 15 #Python
在NumPy中创建空数组/矩阵的方法
Jun 15 #Python
numpy中矩阵合并的实例
Jun 15 #Python
对numpy中shape的深入理解
Jun 15 #Python
Python基于property实现类的特性操作示例
Jun 15 #Python
You might like
php中随机显示图片的函数代码
2011/06/23 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
php实现的用户查询类实例
2015/06/18 PHP
JavaScript版代码高亮
2006/06/26 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
python http基本验证方法
2018/12/26 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
基于Pytorch SSD模型分析
2020/02/18 Python
python爬虫---requests库的用法详解
2020/09/28 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
教师自我评价范例
2013/09/24 职场文书
大学生个人简历自我评价
2013/11/16 职场文书
后备干部考察材料
2014/02/12 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
社区服务活动报告
2015/02/05 职场文书
食品药品安全责任书
2015/05/11 职场文书
导游词幽默开场白
2019/06/26 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
介绍一下28个JS常用数组方法
2022/05/06 Javascript