Pages : 1
#1 Le 30/06/2008, à 19:34
- Petit Lepton
Python et colonnes formatées
Bonsoir à tous, je me permets d'intervenir pour la première fois sur ce fil de discussion pour un sujet concernant Python comme vous vous en doutiez d'après le titre. Je viens de commencer avec ce langage.
Je travaille dans le milieu scientifique et ai programmé ces dernières années en Fortran 90 et un peu en C++. J'essaie de retrouver mes petits, notamment au niveau de la gestion des fichiers. D'après ce que j'ai pu lire, Python gère les fichiers essentiellement en termes de chaînes de caractères. Est-il possible néanmoins d'imposer à la lecture (ou à l'écriture) un format qui ne soit pas une chaîne de caractère tel que deux flottants par exemple. Je n'ai sûrement pas capté la subtilité et l'utilité de tout traiter en chaîne de caractère mais j'ai parfois un peu de mal à jongler avec des colonnes de nombres dont je ne connais pas forcément le format au sein du fichier hormis le fait qu'ils soient en colonne.
Amicalement.
Hors ligne
#2 Le 30/06/2008, à 20:01
- Jean-Julien
Re : Python et colonnes formatées
Analyses les possibilités du module "array".
Personnellement je n'ai jamais écris qu'un seul programme en python, mais j'ai été obligé de manipuler des octets sous forme d'octets et non de caractères (opérations booléennes). Python le permet. S'il y a moyen de descendre à si bas niveau, la solution de ton problème doit être simple. Le tout est de pointer là où il faut dans la doc.
---
Par curiosité, je vais aller y voir moi-même et si je trouve qq chose, je poste.
En attendant, vas voir par là...
http://www.cifen.ulg.ac.be/inforef/swi/ … _notes.pdf
Dernière modification par Jean-Julien (Le 30/06/2008, à 20:07)
Hors ligne
#3 Le 30/06/2008, à 20:23
- Petit Lepton
Re : Python et colonnes formatées
Bonsoir, je me documente effectivement à partir du fichier que tu donnes en lien et c'est justement là que j'ai appris le peu de choses que je sais sur les fichiers.
Merci en tout cas !
Hors ligne
#4 Le 30/06/2008, à 23:07
- Jean-Julien
Re : Python et colonnes formatées
Sur le site officiel du Python, tu peux télécharger la doc au format PDF.
Je me souviens maintenant que c'est là que j'ai trouvé réponse à mes questions.
http://www.python.org/doc/2.5.2/download/
Hors ligne
#5 Le 01/07/2008, à 10:05
- Jean-Julien
Re : Python et colonnes formatées
Je pense avoir la solution.:)
Pour enregistrer et relire des variables de type float, tu dois utiliser le module "pickle".
Tu trouveras un exemple concret dans le livre de Swinnen, au chapitre 9.9 :
"Enregistrer et restituer des variables diverses" (page 117 dans ma version PDF).
Amicalement.
Jean-Julien
Hors ligne
#6 Le 01/07/2008, à 18:46
- Petit Lepton
Re : Python et colonnes formatées
Bonsoir, merci pour cette idée mais le module pickle ne correspond pas exactement à ce que je recherche puisqu'il faut que le fichier soit écrit avec ce module pour pouvoir être lu. Je cherche juste une méthode pour lire un fichier texte comme
1.1 2.2
1.6 3.5
...
La fonction readline va me renvoyer 1.1 2.2 comme une chaîne de caractère alors que je voudrais 1.1 et 2.2 indépendamment. Je peux faire un read(3) qui me prend les trois premiers termes mais j'aimerais une méthode qui soit indépendante du format des données, c.-à-d. qui lise par groupe jusqu'aux espaces.
Amicalement.
Hors ligne
#7 Le 01/07/2008, à 19:05
- Jean-Julien
Re : Python et colonnes formatées
Alors, il faut une boucle qui lit ta ligne caractère par caractère.
Chaque caractère lu est stocké dans une variable tableau.
La boucle s'arrête quand elle rencontre un espace.
Ensuite, ce tableau est analysé par une fonction que tu vas avoir la joie de programmer et qui va te renvoyer une variable de type float.
---
La boucle reprend alors son analyse pour les caractères suivants sur la ligne.
La fonction renvoie ensuite la seconde valeur et la ligne est complètement analysée.
---
Bienvenue dans le monde des analyseurs syntaxiques !!!
Cette programmation va te demander quelques recherches et expérimentations, mais quand elle sera au point, tu seras tranquille et pourras l'utiliser sans même plus y penser, le problème étant résolu à la base une fois pour toutes.
---
C'est le genre de travail où tu joins le code-source de ta fonction à ta bibliothèque de fonctions personnelle, mais là, je crois que je ne t'apprends rien...
Bon travail !
Hors ligne
#8 Le 01/07/2008, à 21:16
- aleph
Re : Python et colonnes formatées
>>> #fonction anonyme utilitaire
>>> g = lambda x: [float(x[0]), float(x[1])]
>>> f = open('z.dat', 'r')
>>> r = f.readlines()
>>> f.close()
>>> r
['1.1 2.2\n', '1.6 3.5\n']
>>> r = [g(e.split()) for e in r]
>>> r
[[1.1000000000000001, 2.2000000000000002], [1.6000000000000001, 3.5]]
>>> type(r[0][0])
<type 'float'>
>>>
#9 Le 02/07/2008, à 09:17
- aleph
Re : Python et colonnes formatées
>>> # proposons du propre
>>>
>>> def lit(fn):
'''Read the data file fn and return a list of lists of floats'''
# lecture du fichier texte
f = open(fn, 'r')
r = f.readlines()
f.close()
# décomposition d'une ligne
g = lambda x: [float(e) for e in x.split()]
# application de g aux éléments de r et renvoi du résultat
return map(g, r)
>>> lit.__doc__
Read the data file fn and return a list of lists of floats
>>> lit('z.dat')
[[1.1000000000000001, 2.2000000000000002], [1.6000000000000001, 3.5]]
>>> lit('z1.dat')
[[1.1000000000000001, 2.2000000000000002], [1.6000000000000001, 3.5, 9.9000000000000004],
[12.0]]
>>> lit('z2.dat')
[]
>>> r = lit('z3.dat')
>>> for e in r: print e
[1.0]
[1.0, 2.0]
[1.0, 2.0, 3.0]
[1.0, 2.0, 3.0, 4.0]
[1.0, 2.0, 3.0]
[1.0, 2.0]
[1.0]
Pages : 1