数据交换格式(CSV,XML,JSON)

下面时三种数据交换格式在python中的使用总结

CSV数据交换格式

CSV(comma separated values):用逗号分隔数据项(称为字段)的数据交换格式,csv主要应用于电子表格和数据库之间的数据交换

在windows平台下,默认为GBK字符集,若用excel打开csv文件时且不想产生乱码的话,csv文件要保存为GBK字符集

python提供专门的csv模块来处理csv数据


  • reader函数

    csv模块提供的csv文件的读函数

    **格式如下:csv.reader(csvfile,dialect=‘excel’,fmtparams)

    • csv.reader()函数返回一个读取器reader对象。csvfile是csv文件对象,dialect参数是方言,提供了一组预定好的格式化参数,fmtparams参数提供单个格式化参数

    • 方言dialect实际参数是csv.Dialect的子类,有以下三类:

      • csv.excel类定义excel生成的csv文件的常用属性,方言名称是excel
      • csv.excel_tab类定义了excel生成的Tab分隔文件的常用属性,方言名称为excel_tab
      • csv.unxi_dialect类定义在UNIX系统上生成的CSV文件的常用属性,使用’\n’作为行终止符,windows下的行终止符为’\r\n’,方言名称为unix
    • import csv
      
      with open('data','r',encoding='gbk') as rf:  #打开名为data的csv文件,采用gbk字符集模式
          reader=csv.reader(rf,dialect='excel')  #生成reader读取器实例对象,传入的方言为excel
          for row in reader:  #对实例对象进行读取
              print('|'.join(row))  #使用join函数进行行的打印
      
      • 上述代码是csv文件的读取
    • with open('data','r',encoding='gbk') as rf:
          reader=csv.reader(rf,dialect='excel')
          with open('copy_data','w',newline='',encoding='gbk') as wf:  #打开要写入的csv文件,设置newline为空字符,默认writer对象会自动添加换行符
              writer=csv.writer(wf,delimeter='\t')  #创建writer对象,数据之间以制表符为分隔 
              for row in reader:
                  print('|'.join(row))
                  writer.writerow(row)  #进行逐行写入,参数row为字段的列表
      
      • 上述代码实现csv文件的写入,复制操作

XML数据交换格式

XML是一种自描述的数据交换格式

XML文档的基本架构:

  • 声明

  • 根元素,note是XML文件的根元素,为根元素的开始,是根元素的结束标签,根元素只有一个,开始与结束标签必须一致

  • 子元素,to,content,from等是note的子元素,所有元素都有开始与结束标签,若开始与结束标签之间没有内容,可写成,称为空标签

  • 属性其中的id为属性,属性值必须放在单引号或双引号之间,一个元素不能有同名的属性

  • 命名空间保证了XML文档的元素与属性的唯一性

  • 限定名,定义元素和属性的合法标识符

  • XPath解析XML文档

    • find(match,namespaces=None),查找匹配的第一个子元素,match可以是标签名或XPath,返回元素对象或None
    • findall(match,namespaces=None),查找所有匹配的元素,返回值是符合条件的列表
    • findtext(match,default=None,namespaces=None),查找匹配的第一个v子元素文本,若为找到,返回默认

    XPath专门在XML文档中查找信息,XPath将XML文档中的所有元素,属性和文本看作节点。属性为属性节点,文本为文本节点,除根节点外,其他节点要么有平行节点要么有父子节点

    表达式 说明 例子
    nodename 选择nodename子节点
    . 选择当前节点 ./Note当前节点下的所有Note节点
    / 路径指示符,相当于目录分隔符 ./Note/CData表示所有Note节点下的CData节点
    选择父节点 ./Note/CData/…表示CData节点的父节点,就是Note节点
    // 所有后代的节点(包括子节点,孙节点等) .//CData表示当前节点中查找所有CData后代节点
    [@attrib] 选择指定属性的所有节点 ./Note[@id]表示有id属性的所有Node节点
    [@attrib=‘value’] 选择指定属性等于value的值的所有节点 ./Note[@id=‘1’]表示id属性等于‘1’的所有Note节点
    [position] 指定位置,位置从1开始,最后一个可使用last()获取 ./Note[1]表示第一个note节点,./Note[last()]表示最后一个节点

JSON数据交换格式

JSON(javaScript Object Notation)是一种轻量级的数据交换格式,描述项目的字符少,传输速度高,流量减少

JSON由两种结构构成:对象和数组,对象是名称:值的对集合,数组是一连串的元素

JSON对象类似于python 中的字典,由键值对构成


  • JSON数据编码

    在python中要将python数据网络传输和存储,可以将python数据转化为JSON数据在进行传输和存储,此过程为编码

  • python数据与JSON数据的映射关系如下表所示

  • python JSON
    字典 对象
    列表,元组 数组
    字符串 字符串
    整数,浮点等数字类型 数字
    True true
    False false
    None null
  • 注意,JSON数据在网络传输或保存在磁盘上时,建议保存为JSON对象,偶尔使用JSON数组,一般情况下只有python的字典,列表和元组需要编码

  • python提供内置模块json实现对数据的json编码

    • dumps()函数将编码的结果以字符串形式返回
    • dump()函数将编码的结果保存到文件对象中
    mport json
    
    py_lst=[1,2,3]
    py_dict={'name':'mike','age':20,'sex':'male'}
    py_tuple=('A','B','C')
    py_dict['a']=py_lst
    py_dict['b']=py_tuple
    
    #print(type(py_dict))
    
    json_obj=json.dumps(py_dict)  #创建json对象,编码python字典对象
    print(type(json_obj))
    
    json_objs=json.dumps(py_dict,indent=4)  #格式化输出json对象,缩进4格输出
    print(json_objs)
    
    with open('data_json','w') as f:
        json.dump(py_dict,f)  #使用dump()函数写入文件
        
    with open('data_json','w') as f:
        json.dump(py_dict,f,indent=4)  #格式化写入文件
        
    
  • JSON数据解码

    编码的逆过程为解码(decode),即将JSON数据转换为python数据,从网络或磁盘中读取JSON数据时,需要节码为python数据

    解码中python数据与json’数据的映射关系时上述表格的逆

    json模块提供解码函数loads()和load()函数,load读取文件或流,对json数据解码,返回为python数据,而loads将json字符串进行解码,返回数据

    Json_obj = r '{"name":"tony","age": 30,"sex": true ,"a": [ 1 , 3 ] ,"b":["A ” ,“B”,“C”]}
    py_dict=json.loads(Json_obj)  #用loads解码单独的json数据对象
    
    
    with open('data_json','r') as f:  #从文件中用load解码
    	data=json.load(f)
    	print(type(data))  #为字典类型
    
    
    • 注意规范的JSON文档要求,每个JSON的数据项的名称和数值中的字符串都要使用双引号,可以写成单引号,或省略,但在解析式可能会出现异常

好啦,上面就是数据交换格式在python中的相关用法,希望对大家有所帮助!!!

你可能感兴趣的:(python,笔记,python,json,xml,csv)