赞
踩
import scipy.io as scio
mat_data = scio.loadmat('.../xxx.mat')
'''
data 通常是一个字典(存储对象没有 items 属性会报错)
读取存储的 mat 文件会得到一个字典, key 和 value 与存储时的字典相对应
读取的 value 会自动转为 numpy.ndarray
'''
scio.savemat('.../xxx.mat', data)
import json
json_data = json.load(open('.../xxx.json', 'r', encoding='utf-8'))
'''
json.dump(obj, 存储数据对象
fp, 存储目标文件
后续参数与 json.dumps() 一致)
'''
with open('.../xxx.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
f.close()
''' json.dumps(obj, skipkeys=False, 字典内key不是python的基本类型(str,unicode,int,long,float,bool,None)会报错, 设为True则跳过这类key ensure_ascii=True, 是否输出ASCLL码, 设为False可输出中文 check_circular=True, 是否跳过对容器类型的循环引用检查 allow_nan=True, cls=None, indent=None, 根据数据格式缩进指定数量空格 separators=None, 指定字典内 每一项 和 key与value之间 的分隔符 separators=(',',':') encoding="utf-8", default=None, sort_keys=False, 是否按key排序 **kw) ''' data = json.dumps(data, indent=4, ensure_ascii=False) with open('.../xxx.json', 'w', encoding='utf-8') as f: f.write(data) f.close()
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank>1</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> </data>
<?xml 文档声明 ?>
<根元素名>
<元素名 属性名="属性值">
<元素名>文本内容</元素名>
<元素名 属性名="属性值" 属性名="属性值"/>
</元素名>
</根元素名>
注:解析时会对xml的换行缩进空格进行处理
<rank>4</rank>
与
<rank>
4
</rank>
是不同的
import xml.etree.ElementTree as ET
'''
XML 是一种分层数据格式, 可以用树结构表示
ElementTree 将整个 XML 文档表示为一棵树, 对整个文档操作(读取/写入)在 ElementTree 上完成
Element 表示该树中的单个节点, 对 XML 的元素操作在 Element 上完成
'''
tree = ET.parse('.../xxx.xml') # ElementTree 读取整个文档
root = tree.getroot() # Element 获取根节点(根元素)
功能 | 返回数据 | |
Element.tag | 获取当前元素名 | 字符串 |
Element.attrib | 获取当前元素所有属性 | 字典 |
Element.items() | 获取当前元素所有属性 | 列表 |
Element.keys() | 获取当前元素所有属性名 | 列表 |
Element.get('属性名') | 获取当前元素指定属性名的属性值 | 字符串 |
Element.text | 获取当前元素的文本内容 | 字符串 |
Element.find('元素名') | 获取当前元素下第一个该元素名的子元素(一级) | Element |
Element.findall('元素名') | 获取当前元素下所有该元素名的子元素(一级) | 列表 |
Element.findtext('元素名') | 获取当前元素下第一个该元素名的子元素(一级)的文本内容 | 字符串 |
list(Element) | 获取当前元素下所有的子元素(一级) | 列表 |
Element.getiterator('元素名') | 获取当前元素下所有该元素名的子元素(n级) | 迭代器 |
不指定元素名则为所有子元素(n级) | ||
Element.iter('元素名') | 与Element.getiterator() 用法相同 | 迭代器 |
Element.iterfind('元素名') | 获取当前元素下所有该元素名的子元素(一级) | 迭代器 |
'''
Element 可以像列表一样索引
'''
Input: root[0][1].text
Output:'2008'
Input: root[0:2]
Output:[<Element 'country' at 0x0000018AE50B3368>,
<Element 'country' at 0x0000018AE50BAA98>]
功能 | |
Element.set('属性名', '属性值') | 将元素上的属性设为该值,属性不存在则会添加该属性 |
Element.append(Element) | 在末尾添加子元素 |
ET.Element('元素名') | 新建元素 |
ET.SubElement(Element, '元素名', attrib={}) | 父元素下创建子元素并返回子元素 |
ET.ElementTree() | 新建树 |
ElementTree._setroot(Element) | 设置树的根元素 |
tree.write('.../xxx.xml')
with open('.../xxx.txt', 'r') as f:
data = f.read()
data = f.readline()
data = f.readlines()
'''
三种读取模式
read() 返回字符串, 包含txt中所有内容
readline() 返回字符串, 包含一行的内容, 再运行一次得到下一行内容
readlines() 返回列表, 列表中每个字符串为txt中一行内容
'''
可以用 Numpy 读取,例如对于目标检测的标签文件:
label = np.loadtxt(path, dtype=np.float32).reshape(-1, 5)
with open('.../xxx.txt', 'w') as f:
f.write(data)
'''
data只能是字符串
'''
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''
mode:
'r' 读取 文件不存在报错
'w' 写入 文件不存在新建文件 文件存在覆盖原文件
'x' 创建并写入 文件存在报错
'a' 写入 文件不存在新建文件 文件存在在原文件末尾追加
'r+' 更新(读写) 文件不存在报错 文件存在覆盖原文件
'w+' 更新(读写) 文件不存在新建文件 文件存在覆盖原文件
'a+' 更新(读写) 文件不存在新建文件 文件存在在原文件末尾追加
'rb' 读二进制文件
'wb' 写二进制文件
'''
import numpy as np
npzFile = np.load('.../xxx.npz')
'''
获取文件中的 array 数据类似字典的键值对索引
通过 npzFile.files 可以由得到文件中存储 array 的 keys 构成的列表
通过 npzFile[key] 得到对应 array
'''
np.savez('.../xxx.npz', key1 = array1, key2 = array2)
'''
文件路径不写后缀也会自动加上
不设置 keys 会按顺序默认为 arr_0, arr_1, ...
keys 不能重复
'''
# example
a = np.array([1,2,3])
b = np.array([4,5,6])
np.savez('test1', a = a, b = b)
np.savez('test2.npz', a, b)
npzFile1 = np.load('test1.npz')
npzFile2 = np.load('test2.npz')
print(npzFile1.files)
>>> ['a', 'b']
print(npzFile2.files)
>>> ['arr_0', 'arr_1']
print(npzFile1['a'])
>>> [1 2 3]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。