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=<class 'float'>, 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时可自动去除变量首尾的空格