Para guardar de manera permanente los datos de memoria de un array Numpy para su posterior uso existen distintas opciones según sea el archivo de tipo binario, texto y CSV (Valores separados por comas).
Leer y escribir arrays Numpy en archivos de texto
loadtxt() y savetxt()
Leer y escribir los datos de arrays en archivos de texto.
# Escribir en un archivo de texto un array (10x3) generado
# con números aleatorios del 1 al 4:
a = np.random.randint(1, 5, (10,3), dtype=np.int8)
print(a)
# [[4 3 4]
# [3 2 2]
# [3 3 1]
# [3 1 3]
# [3 3 1]
# [4 1 3]
# [4 2 3]
# [4 1 3]
# [3 4 3]
# [4 4 3]]
np.savetxt('datos.txt', a)
# Leer los datos de un archivo de texto y declarar un array:
a = np.loadtxt('datos.txt')
print(a)
# [[4. 3. 4.]
# [3. 2. 2.]
# [3. 3. 1.]
# [3. 1. 3.]
# [3. 3. 1.]
# [4. 1. 3.]
# [4. 2. 3.]
# [4. 1. 3.]
# [3. 4. 3.]
# [4. 4. 3.]]
Leer y escribir arrays Numpy en archivos CSV
loadtxt() y savetxt()
Leer y escribir los datos de arrays en archivos CSV (valores separados por comas).
# Escribir en un archivo CSV un array (10x3) generado con
# números aleatorios del 1 al 4:
a = np.random.randint(1, 5, (10,3))
print(a)
np.savetxt("datos.csv", a, delimiter=",")
# [[1 2 2]
# [2 1 4]
# [3 1 1]
# [3 3 1]
# [3 3 3]
# [4 2 3]
# [2 2 1]
# [3 2 4]
# [1 2 4]
# [3 4 2]]
# Leer los datos de un archivo CSV y declarar un array:
a = np.loadtxt('datos.csv', dtype=np.int8, delimiter=',', skiprows=0)
print(a)
# [[1 2 2]
# [2 1 4]
# [3 1 1]
# [3 3 1]
# [3 3 3]
# [4 2 3]
# [2 2 1]
# [3 2 4]
# [1 2 4]
# [3 4 2]]
Leer y escribir los datos de arrays en archivos binarios
fromfile() y tofile()
Leer y escribir los datos de arrays en archivos binarios.
# Escribir en un archivo binario un array (10x3) generado
# con números aleatorios del 1 al 4:
a = np.random.randint(1, 5, (10,3), dtype=np.int8)
print(a)
# [[4 3 4]
# [3 2 2]
# [3 3 1]
# [3 1 3]
# [3 3 1]
# [4 1 3]
# [4 2 3]
# [4 1 3]
# [3 4 3]
# [4 4 3]]
a.tofile('datos.dat')
# Leer los datos del archivo binario y declarar un array:
# Cuando se leen los datos con fromfile() se crea un vector
# con 30 elementos porque los datos binarios se guardan de
# forma consecutiva. Para obtener el array bidimensional
# original después de leer hay que convertir el vector en un
# array 2D (10x3) con el método reshape().
a = np.fromfile('datos.dat', dtype=np.int8)
a = a.reshape(10, 3)
print(a)
# [[4 3 4]
# [3 2 2]
# [3 3 1]
# [3 1 3]
# [3 3 1]
# [4 1 3]
# [4 2 3]
# [4 1 3]
# [3 4 3]
# [4 4 3]]
Leer y escribir cadenas de texto en archivos binarios
fromfile() y write()
Leer y escribir cadenas de texto en archivos.
# Para escribir una cadena en un archivo binario:
cadena = b'Python para impacientes'
archivo = open('datos.dat', 'wb')
archivo.write(cadena)
archivo.close()
# Para leer la cadena y declarar el array:
a = np.fromfile('datos.dat', count=6, dtype='S1')
print(a)
# [b'P' b'y' b't' b'h' b'o' b'n']
# Consultar otros argumentos admitidos: sep y offset
Leer y escribir listas en archivos binarios
pickle.load(), pickle.dump()
Leer y escribir listas Python en archivos binarios. Después de leer una lista de un archivo para convertir a array utilizar el método asarray().
# Escribir una lista en un archivo binario (con pickle):
import pickle
lista = [0.1, 0.2, 0.3, 0.4, 0.5]
archivo = open('datos.dat', 'wb')
pickle.dump(lista, archivo)
archivo.close()
# Leer la lista y declarar el array:
archivo = open('datos.dat', 'rb')
lista = pickle.load(archivo)
a = np.asarray(lista)
archivo.close()
print(a)
# [0.1 0.2 0.3 0.4 0.5])
