下面时三种数据交换格式在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中的相关用法,希望对大家有所帮助!!!