Numpy读取文件的3中方法:loadtxt、load、fromfile。
方法 | 描述 | 返回数据 |
---|---|---|
loadtxt | 读取txt文本 | 数组 |
load | 读取Numpy专用的二进制数据,读取从npy、npz、pickled文件加载数组或pickled对象 | 数组、元组、字典等 |
fromfile | 简单的文本、二进制数 | 数据 |
1. loadtxt
loadtxt(fname, dtype=<type ‘float‘>, comments=‘#‘, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
参数:
fname
:指定文件名称或字符串。支持压缩文件,包括gz、bz格式。
dtype
:数据类型。 默认float。
comments
:字符串或字符串组成的列表。表示注释字符集开始的标志,默认为#。
delimiter
:字符串。分隔符。
converters
:字典。将特定列的数据转换为字典中对应的函数的浮点型数据。例如将空值转换为0,默认为空。
skiprows
:跳过特定行数据。例如跳过前1行(可能是标题或注释)。默认为0。
usecols
:元组。用来指定要读取数据的列,第一列为0。例如(1, 3, 5),默认为空。
unpack
:布尔型。指定是否转置数组,如果为真则转置,默认为False。
ndmin
:整数型。指定返回的数组至少包含特定维度的数组。值域为0、1、2,默认为0。
返回:从文件中读取的数组。
示例数据如下:
import numpy as np
file_name = ‘numpy_data.txt‘
data = np.loadtxt(file_name, dtype=‘float32‘, delimiter=‘ ‘)
print(data)
2. load
load方法读取Numpy专用的二进制数据文件,从npy、npz、pickled文件加载数组或pickled对象,该文件通常基于Numpy的save或savez等方法产生。
load(file, mmap_model=None, allow_pickle=True, fix_import=True, encoding=‘ASCII‘)
参数:
file
:类文件对象或字符串格式。类文件对象需要支持seek()和read()方法。
mmap_mode
:内存映射模式。值域None。‘r+’,‘r’,‘w+‘,‘c’。
allow_pickle
:布尔型。决定是否加载存储在npy文件的pickled对象数组,默认为True。
fix_imports
:布尔型。如果为True,pickle尝试将旧的Python 2名称映射到 Python3中并使用新的名称。仅在Python2生成的pickled文件加载Python3时才有用,默认值True.
encoding
:字符串。决定读取Python 2 字符串时使用何种编码。
返回:从数据文件中读取的数组、元组、字典等。
示例数据如下:
import numpy as np
write_data = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
np.save(‘load_data‘, write_data) # 保存为npy数据文件
read_data = np.load(‘load_data.npy‘) # 读取npy文件
print(read_data)
3. fromfile
Numpy的fromfile方法可以读取简单的文本文件以及二进制数据。
该方法读取的数据来源Numpy的tofile方法。即通过tofile()将数据保存为二进制文件。
fromfile(file, dtype=float, count=-1, sep=‘‘)
参数:
file
:文件或字符串
dtype
:数据类型。注意数据类型与文件存储的类型一致。
count
:整数型。读取数据的数量,-1表示读取所有数据。
sep
:字符串。如果file是一个文本文件,那么该值就是数据间的分隔符。如果为空("")则意味着file是一个二进制文件,多个空格的话按照一个空格处理。
返回:从文件中读取的数据。
import numpy as np
file_name = ‘numpy_data.txt‘
data = np.loadtxt(file_name, dtype=‘float32‘, delimiter=‘ ‘)
tofile_name = ‘binary‘ # 定义导出二进制文件名
data.tofile(tofile_name) # 导出二进制文件
fromfile_data = np.fromfile(tofile_name, dtype=‘float32‘) # 读取二进制文件
print(fromfile_data)
注意:务必确保读入文件跟存储文件时的数据类型一致,否则导致数据报错。比如上面代码,不指定float32格式,看一下输出结果。
tofile()方法保存的数据丢失数据形状信息,因此导入时无法重现原始数据矩阵。