numpy中为文本的输入输出提供了一组对偶函数,即
loadtxt和
savetxt。
考虑到大家手里没有合适的用于学习的txt文件,所以先介绍savetxt,其参数入口如下
savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
其中,fname和X为必选参数,分别表示文件路径和将要存储的数组,其他参数含义如下
fmt 存储格式delimiter 分隔符newline 换行符header 文件头部添加的内容footer 文件尾部添加的内容comments 注释encoding 编码方式其中,fmt用于格式化存储数组数据,其基本形式与C语言或者Python进行格式化字符串的形式是相同的。例如%f表示存储为浮点型;%.2f表示存储的浮点型值保留两位小数。如果fmt中只有一个%,则对所有列采取相同的处理方法,否则每一列按照不同的处理方法。具体情况可见如下案例
import numpy as np
x = np.random.rand(3,5)
np.savetxt("test.txt", x, fmt="%.2f", header='a b c d e')
保存结果为
# a b c d e
0.14 0.65 0.13 0.44 0.35
0.16 0.92 0.18 0.76 0.92
0.80 0.07 0.83 0.52 0.37
即每一列都保留了两位有效数字,同时文件开头也添加了相应的header,并且添加了comments。其分隔符为空格,换行符为\n。由于fotter与header作用方式相同,所以下面就不再演示了。
如果对每一列设定不同的fmt,则效果为
np.savetxt("test1.txt", x, fmt="%.2f %.3f %.4f, %e, %.5f")
保存结果如下,可见的确保留了相应的小数位数。
0.14 0.649 0.1332, 4.447176e-01, 0.35217
0.16 0.917 0.1831, 7.607057e-01, 0.92109
0.80 0.074 0.8343, 5.217247e-01, 0.36754
loadtxt是savetxt的对偶函数,功能是读取函数。
numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None, *, like=None)
其中,fname, comments, delimiter, encoding这四个参数与savetxt中的含义相同,只在读写过程中有微小差异,参数含义为
dtype 读取后的数据类型comments 注释标识符,加载时会自动忽略注释标识符后的字符串delimiter 分割符,为整数时表示元素最大宽度converters 字典或函数,用以转化数据格式skiprows 忽略行数usecols 使用的列号unpack 读取后转置ndmin 返回数组的最小维度max_rows 在skiprows后面读取的最多行数like 读取后的数组格式与like数组相同以刚刚存储的test.txt为例,
>>> np.loadtxt("test.txt")
array([[0.14, 0.65, 0.13, 0.44, 0.35],[0.16, 0.92, 0.18, 0.76, 0.92],[0.8 , 0.07, 0.83, 0.52, 0.37]])
genfromtxt(fname,dtype,comments,delimiter,skipd_header,skip_fonter,converters,missing_values,filling_values,usecols,names, autostrip,**kwarg)
其中,大部分参数与loadtxt中含义相同,其他参数的含义如下。
skip_header 跳过文件头部的字符行数skip_footer 跳过文件尾部字符串行数missing_values 指定数组中忽略的值filling_values 指定某个值用于替代忽略值autostrip 为True时可自动去除变量首尾的空格