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()方法保存的數據丟失數據形狀信息,因此導入時無法重現原始數據矩陣。