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实现问号表达式(?)的方法
Nov 27 Python
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
Python基础入门之seed()方法的使用
May 15 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
python实现键盘输入的实操方法
Jul 16 Python
基于python爬取有道翻译过程图解
Mar 31 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
Python 串口通信的实现
Sep 29 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python运算符+与+=的方法实例
Feb 18 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代码把全角数字转为半角数字
2007/12/10 PHP
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
PHP的反射机制实例详解
2017/03/29 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jQuery参数列表集合
2011/04/06 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
毕业生求职推荐信
2013/11/04 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
聊聊redis-dump工具安装问题
2022/01/18 Redis