IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Programme moulinette pour réorganisation tableau 2 dimensions


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Programme moulinette pour réorganisation tableau 2 dimensions
    Bonjour à tous,


    actuellement en stage, je suis chargé de réécrire des tableaux dans un nouveau format. Je m'explique, j'ai un fichier .dat avec N tableau sous la forme 57 lignes 1 colonne. Je dois le réécrire sous la forme 12 lignes 5 colonnes dans un fichier txt.

    je vous montre le format d'entrée que j'ai :

    $ FLUX sur ELEMENT 35161
    $
    TABTYPE 1001 QNODE
    TABDATA 1001 0.5964697240E+00
    TABDATA 1001 0.5964697240E+00
    ...
    TABDATA 1001 0.5964697240E+00
    TABDATA 1001 0.5964639666E+00
    TABDATA 1001 0.5763934882E+00

    en gras, ce sont les élément que je dois récupérer. Le format d'arrivée doit ressembler à ça :

    N00035161 ( 86) =
    2.4666E-04, 8.2601E-05, 1.4505E-04, 3.7443E-04, 7.1601E-04,
    5.8408E-04, 2.6607E-04, 2.9567E-04, 3.3031E-04, 3.8585E-04,
    3.8574E-04, 6.0393E-04, 3.7377E-04, 6.6185E-04, 4.4502E-04,

    ici en gras, j'ai mis le nom du tableau qui doit correspondre avec le n° de l'élément.

    On m'a conseillé de faire ça à l'aide d'une moulinette. Or ayant peu de notions en langage info (uniquement JAVA et depuis peu Python), je me retrouve bloqué sur la méthode à utiliser. Je pense utiliser des for in pour parcourir les tableaux mais j'avoue être pas mal dans le flou.

    Si jamais l'un de vous à des pistes à me conseiller ou des exemples de moulinettes, je suis preneur.


    Merci, a plus.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Tu peux faire un truc du genre:

    - ouverture fichier .dat
    - lecture du fichier et récupération des informations sous forme de dictionnaire dont la clé est le numéro de l'élément (ici: 35161) et la valeur est une liste des numéros (ex lecture par ligne (readline) et traitement de la ligne avec une expression régulière)
    dico={"35161": [0.5964697240E+00, 0.5964697240E+00...], "XXXX": []...}
    -fermer fichier

    - ouvrir le fichier de sortie .txt
    - pour chaque clé du dico, tu print les infos avec ou sans traitement (ex: 35161 -> N00035161; (86) doit être ton nombre de num scientifique pour l'élément...)
    - fermer fichier

    voilà la manière de procéder que j'utiliserais
    si besoin mets les problèmes que tu rencontres

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse

    là où je n'arrive pas à voir clair c'est pour la récupération des infos, le programme va-t-il détecter automatiquement les n° des tableaux ainsi que les valeurs de chaque ligne que j'ai en entrée? Si non comment faire ?

    Il y a qqc comme 9000 tableaux à traiter et ils ne sont pas rangés de façon logique.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    pour la récupération:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fichier = open("/mon/fichier.dat", "r")
    for ligne in fichier:
    	if re.match('$ FLUX sur ELEMENT 35161'):			# si ta ligne est une ligne de déclaration d'élément 
    		ligne_split   = ligne.split(" ")			# récupération du dernier élément après découpage par espace
    		element       = ligne_split[-1]
    		dico[element] = []					#creation de la clé et de sa valeur (liste vide)
    	elif re.match('TABDATA'):					# si ta ligne est une ligne de résultat
    		ligne_split = ligne.split(" ")
    		valeur      = ligne_split[-1]
    		dico[element].append()					# insertion du num scientifique dans la liste
    fichier.close()
    il est sûrement possible d'améliorer le code mais ça doit fonctionner ou au moins te donner une idée
    (code pas testé)

    Edit: je viens de voir que tu dis avoir 9000 éléments à traiter, alors tu peux peut être intégrer l'écriture dans le fichier de sortie à ce bout de code (ça t'évitera de parcourir le tableau final) et donc passer seulement par une liste et non pas un dictionnaire

  5. #5
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut,

    récupération des informations sous forme de dictionnaire
    Je plussoie.

    Il manque quelque chose cela dit dans le code proposé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico[element].append(valeur)
    Une fois le dictionnaire créé, il suffit d'itérer sur les clés et valeurs pour le traiter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key,value in dico.items():
        # je fais plein de choses comme afficher les cles
        print key
    Par contre je n'utiliserais pas les expressions régulières pour ma part. Je me contenterais de faire des tests sur les splits de mes lignes.


    Ju

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Julien N Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key,value in dico.items():
        # je fais plein de choses comme afficher les cles
        print key
    Salut
    Je pencherais plutôt pour cette solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key, value in dico.iteritems():
        # je fais plein de choses comme afficher les cles
        print key
    En effet, items() génère la liste entière en mémoire avant de la renvoyer au for pour qu'elle soit traitée. Alors que iteritems() renvoie un simple générateur lequel ensuite, renverra les éléments un à uns à la demande.

    Ainsi, Python n'a pas besoin de réserver une place immense en mémoire pour y ranger ses éléments...

  7. #7
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Alors que iteritems() renvoie un simple générateur
    Merci beaucoup Sve@r!

    Ju

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à tous pour vos réponses.

    Je me demandais si ça n'était pas plus facile de faire via des listes ?

    Et aussi, pour écrire le nouveau fichier .txt je peux directement l'écrire en insérant les bonnes lignes de codes directement dans la boucle for in non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    fichier = open("/mon/fichier.dat", "r")
    fichier_sortie = open("/mon/fichier.txt", "w")
     
    for ligne in fichier:
    	if re.match('$ FLUX sur ELEMENT 35161'):			# si ta ligne est une ligne de déclaration d'élément 
    		ligne_split   = ligne.split(" ")			# récupération du dernier élément après découpage par espace
    		element       = ligne_split[-1]
    		dico[element] = []					#creation de la clé et de sa valeur (liste vide)
                    fichier_sortie.write(dico[element])     #coder ici pour écrire directement dans le nouveau fichier .txt
    	elif re.match('TABDATA'):					# si ta ligne est une ligne de résultat
    		ligne_split = ligne.split(" ")
    		valeur      = ligne_split[-1]
    		dico[element].append()					# insertion du num scientifique dans la liste
                    fichier_sortie.write(dico[element])     #écriture du num scientifique dans le nouveau fichier
     
     
    fichier.close()
    fichier_sortie.close
    Ca pourrait être un truc comme ça non ?

    Merci encore.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par quentin31000 Voir le message
    Ca pourrait être un truc comme ça non ?
    si tu veux écrire directement dans le fichier de sortie ne passe pas par le dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fichier = open("/mon/fichier.dat", "r")
    fichier_sortie = open("/mon/fichier.txt", "w")
     
    for ligne in fichier:
    	if re.match('$ FLUX sur ELEMENT 35161'):			# si ta ligne est une ligne de déclaration d'élément 
    		ligne_split   = ligne.split(" ")			# récupération du dernier élément après découpage par espace
    		element       = ligne_split[-1]
            fichier_sortie.write("N000".element.":\n")     #coder ici pour écrire directement dans le nouveau fichier .txt
    	elif re.match('TABDATA'):					# si ta ligne est une ligne de résultat
    		ligne_split = ligne.split(" ")
    		valeur      = ligne_split[-1]
    		fichier_sortie.write(valeur."\n")     #écriture du num scientifique dans le nouveau fichier
     
     
    fichier.close()
    fichier_sortie.close
    Par contre, tu vas alourdir ton code pour le traitement des données et la mise en page du fichier de sortie et sur ton exemple de sortie tu voulais le nombre de valeur par élément ("N00035161 ( 86) =") ce qui ne sera pas possible sans passer par le dictionnaire

Discussions similaires

  1. [XL-2007] Programme VBA pour confection tableau avec n°article en reference
    Par gabigabou dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2014, 21h38
  2. Liberation memoire pour un tableau 2 dimensions
    Par alex01pernot dans le forum Débuter
    Réponses: 5
    Dernier message: 20/04/2010, 19h05
  3. Conteneur pour un tableau à 2 dimensions
    Par Mat.M dans le forum SL & STL
    Réponses: 7
    Dernier message: 25/02/2010, 17h15
  4. masque gaussien pour un tableau à une dimension
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 20/02/2009, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo