Dans le calcul scientifique, il est essentiel de pouvoir fournir des informations à l'ordinateur (input) et de pouvoir récupérer le résultat du traitement des données (output). Cette communication avec la machine au travers de Python passe souvent par la lecture et l'écriture de fichiers textes.
La fonction np.loadtxt(fname) de NumPy permet
de lire et d'exploiter un fichier texte contenant des données
placées dans une ou
plusieurs colonnes séparées par un délimiteur (en général un (ou
plusieurs) espace(s)).
Le paramètre optionnel delimiter permet de choisir un
délimiteur particulier.
La fonction np.savetxt(fname) de NumPy
permet quant à elle la sauvegarde
de données dans un fichier texte.
Pour comprendre comment utiliser les deux fonctions évoquées ci-dessus, nous allons considérer le fichier texte suivant, obtenu lors d'une expérience de chute libre.
Fichier texte 'ChuteLibreData.txt' :
Données collectées (masse m en chute libre)
Date : 20 février 2025
No de la mesure Temps[s] Distance parcourue[m] Incertitude[m]
0 0 0 0
1 0.51 1.41 1.5
2 1.01 4.39 2.3
3 1.49 11.9 2.5
4 2. 20.7 2.9
5 2.5 28.8 2.7
6 2.99 45.9 2.9
Le code suivant permet par exemple de récupérer les trois
premières colonnes (paramètre usecols de
np.loadtxt) du fichier
ChuteLibreData.txt sans tenir compte des quatre premières
lignes (paramètre skiprows de np.loadtxt) :
import numpy as np
Data_array = np.loadtxt('ChuteLibreData.txt', usecols = (0,1,2), skiprows = 4, unpack = False)
print(np.shape(Data_array))
identification, xdata, ydata = np.loadtxt('ChuteLibreData.txt', usecols = (0,1,2), skiprows = 4, unpack = True)
print(xdata)
Lorsque le paramètre unpack de np.loadtxt prend la valeur
True (la valeur False est la valeur par défaut), le
tableau produit est transposé ce qui permet de
récupérer les données (colonnes) dans des tableaux unidimensionnels
(quatrième ligne du code ci-dessus).
Sortie (résultat) du code Python ci-dessus :
(7, 3)
[0. 0.51 1.01 1.49 2. 2.5 2.99]
La structure générale de la fonction np.savetxt est la
suivante :
np.savetxt(nom_du_fichier, tableau, fmt="%0.18e", delimiter=" ", newline="\n", header="", footer="", comments="# ")
Si les données que l'on cherche à sauvegarder se trouvent dans plusieurs tableaux unidimensionnels, il faut les rassembler en un seul tableau.
fmt="%0.18e" permet d'obtenir un affichage
à 18 décimales en notation scientifique (exponentielle). Dans l'exemple ci-dessous, nous nous contentons de
deux chiffres après la virgule et d'une largeur de colonne minimale de
\(5\).
Le code suivant fournit un exemple concret de sauvegarde de données. Il utilise les données que nous avons déjà rencontrées plus haut :
import numpy as np
identification, xdata, ydata, erreur = np.loadtxt("ChuteLibreData.txt", skiprows=4, unpack=True)
informations = 'Données de la chute libre après avoir été retravaillées'
informations += '\nDate de creation : 22 février 2025'
informations += '\nVersion : 2.02'
informations += '\n\n\nMesure-'
informations += 'temps (en s)-'
informations += 'distance (en m)-'
informations += 'erreur estimée (en m)'
np.savetxt('ChuteLibreDataOut.txt', np.transpose([identification, xdata, ydata, erreur]), header=informations, fmt="%5.2f")
Le mot clé header de np.savetxt permet de placer une
en-tête au-dessus des
données, alors que le mot clé footer est utilisé pour clore le
tableau par une série de commentaires.
Sortie (résultat) du code Python :
# Données de la chute libre après avoir été retravaillées
# Date de creation : 22 février 2025
# Version : 2.02
#
#
# Mesure-temps (en s)-distance (en m)-erreur estimée (en m)
0.00 0.00 0.00 0.03
1.00 0.51 1.31 0.02
2.00 1.01 4.99 0.03
3.00 1.49 10.90 0.03
4.00 2.00 19.70 0.03
5.00 2.50 29.80 0.03
6.00 2.99 43.90 0.02