Cuando se manipulan datos es habitual tener que trabajar con columnas, sobre uno o varios archivos.
Dada una serie de archivos alojados en un directorio. Utilizaremos la función loadtxt
de la librería de python numpy para capturar el contenido almacenado en columnas, lo cual nos permitirá manipularlo por medio de índices.
Con savetxt
, guardaremos la información en archivos de texto.
Para finalizar, con la librería matplotlib, se generarán varias imágenes en png con gráficos de los datos.
Teniendo archivos de la forma:
0.0 0.9
1.0 1.2
2.0 1.8
3.0 1.3
4.0 1
5.0 0.9
6.0 0.8
7.0 0.7
8.0 0.7
9.0 0.6
El siguiente script suma la segunda columna de un par de archivos, repitiendo el proceso para todas las combinaciones de dos archivos en el directorio.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import numpy as np
import matplotlib.pyplot as plt
files = {}
# almacenar nombres de archivo y contenido
dname = 'input/'
for f in os.listdir(dname):
fname = dname + f
files[f] = np.loadtxt(fname)
# recorrer todos los archivos
for fi in files.keys():
for fj in files.keys():
if fi != fj:
namei = fi.replace('.txt','')
namej = fj.replace('.txt','')
outfile = 'sum_' + namei + '_' + namej
# primera columna del archivo
c1 = files[fi][:,0]
# segunda columna del archivo
fi_c2 = files[fi][:,1]
fj_c2 = files[fj][:,1]
# suma de columnas
sum_c2 = fi_c2 + fj_c2
# guardar suma en texto
np.savetxt(outfile + '.txt',
np.column_stack([c1,sum_c2]),
fmt = '%10.2f')
plt.clf()
# curva archivo i
plt.plot(c1,fi_c2)
# curva archivo j
plt.plot(c1,fj_c2)
# curva archivo suma
plt.plot(c1,sum_c2)
# guarda curvas en png
plt.savefig(outfile)
Una de las imágenes de salida, donde la linea azul y verde representan los datos en las columnas leídas y la roja la suma de ambas.