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 :

[Python & Excel] execution d'un ALT+Entrée


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut [Python & Excel] execution d'un ALT+Entrée
    Bonjour,
    je ne sais pas trop si ma demande doit aller dans python ou dans Excel donc je vais la poser ici.

    Dans un programme python qui a pour but de d'analyser des fichiers de log (récupérer le temps des instructions, les instructions elles mêmes, etc...), ces informations sont misent dans un dictionnaire du type {Num_instruction:[ligne_debut;ligne_fin;tps_execution;tps_ecoule_total]}

    Je souhaite à partir de cela créer un fichier Excel, pour cela j'ai créé ce bout de code (pas très propre je sais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	fichier1 = map(lambda x:x.replace("\n",""),fichier1)#fichier1 contient le log
    	spooltxt1="instruction ID`ligne debut`ligne fin`duree de l'instruction`temps depuis le debut`instruction`\n"
    	for key in dic1.keys():
    		spooltxt1+="%i`%i`%i`%s`%s`"% (key,dic1[key][0],dic1[key][1],dic1[key][2],dic1[key][3])
    		spooltxt1+='\\r'.join(fichier1[dic1[key][0]:dic1[key][1]])
    		spooltxt1+="`\n"
    Dans ce code j'enlève donc les retours à la ligne et je rajoute des "`" en tant que séparateur. Mon problème vient du faite que je voudrais que chaque \r soit pris en compte dans Excel comme un ALT+Entrée (c'est à dire un retour à la ligne tout en restant dans la même case), or lorsque je fais un ALT+Entrée dans Excel je n'ai pas de caractère exploitable que je pourrais mettre dans mon code python (j'ai essayé d'ouvrir le fichier .csv avec un notepad mais le caractère que je récupère provoque un ALT+Entrée quand je le copie )

    Donc pour résumer je voudrais remplacer le "\\r" par quelque chose qui serait interprété par Excel comme un ALT+Entrée

    Auriez vous des idées?

    Merci d'avance
    M.L.G.

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Par défaut
    Je crois que dans Excel le retour dans une même cellule est : " CHR(10)" ou "CHR(13)" en code ASCII.
    A tester.

    Bonne chance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    le ALT+Entrée correspond en effet au CHR10 mais il est interprété comme une chaine de caractères quelconque en dehors d'une macro en VB

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut questions
    - fichier1 est de quel type ? liste? tuple ? ......
    où sont placés les '\n' dans les éléments de fichier1 ? à la fin des éléments = tous des retours de ligne ?


    - inutile d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for key in dic1.keys():
    Je ne sais pas pourquoi, mais écrire
    renvoie les clés


    - je n'arrive pas à comprendre ce qu'est
    fichier1[ dic1[key][0] : dic1[key][1] ]
    dans la quatrième ligne

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Par défaut
    Bonjour eyquem,
    en effet il manque pas mal d'information

    - fichier 1 correspond
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier1=open('%s'%fic1, 'r').readlines()
    fic1 étant un fichier .txt ou .log récupéré par un raw_input
    Les \n sont dont placés à la fin de chaque élément.

    - pour le for, tu as en effet raison ta méthode est plus simple, on dirait que j'aime bien me compliquer la vie.

    - dernier point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier1[ dic1[key][0] : dic1[key][1] ]
    dic1[key][0]représente la ligne ou commence le bloc d'instruction
    dic1[key][1]représente la ligne ou finit le bloc d'instruction

    On obtient donc toutes les lignes d'instruction pour un instruction ID donné



    Sinon j'ai continué à avancé sur le problème et ne trouvant pas comment résoudre ce problème je l'ai contourné en utilisant directement le module win32com qui permet d'exécuter les commandes Excel (bon c'est pas aussi simple mais c'est le principe) Grâce à ça j'écris directement dans une case autant de lignes que je veux sans avoir à me soucier de l'interprétation des caractères. Je n'utilise du coups plus de fichier intermédiaire je créé directement un fichier excel que je remplis case par case.


    M.L.G.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    « fichier1 est de quel type ? liste? tuple ? ...... »
    c'était parce que fichier1 dans map() pouvait aussi bien être une liste, qu'un objet-fichier ou un tuple, etc....puisque map() traite des objets itérables.

    Je croyais que selon la nature de fichier1 , il pouvait y avoir des '\n' au milieu de ses éléments ou pas.
    Erreur.
    En fait la définition de fichier1 ne détermine en rien s'il peut y avoir ou non des '\n' à l'intérieur de ses éléments.
    De toutes façons ça n'a pas d'importance relativement à ce que je voulais dire, et la réponse à la deuxième question a confirmé ma première impression: la première ligne de ton extrait de code est vraiment pas terrible.

    En étant un peu plus doué en Python, il était possible de le dire tout de suite sans avoir à poser de questions.

    Car en fait, après avoir fait des tests, j'ai vu qu'en Python '\n' désigne exclusivement un retour à la ligne = EOL (end of line) et que même s'il y a des successions de caractères '\ suivi de n' dans un string elles ne sont pas concernées par replace("\n","").
    De telles successions doivent être représentée par '\\n', si on les cherche dans un string.
    Bien sûr, je le savais, mais j'avais des idées encore un peu confuses sur le sujet avant de regarder de près.

    Donc dans ta première ligne, sauf erreur de ma part, replace("\n","") ne peut pas concerner autre chose que les EOL , même s'il y a '\ suivi de n' au sein des éléments de fichier1.
    En tous cas, c'est ce que j'ai constaté sur des tests.


    Tout ça pour me permettre de te signaler sans faire d'erreur qu'éliminer les EOL peut se faire beaucoup plus simplement que par ta première ligne de code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier1 = open('%s'%fic1, 'r') . readlines()
    liste = [ ln[0:-1] for ln in fichier1 ]
    puisque readlines() produit une liste en gardant les EOL;


    ou directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fich = open('%s'%fic1, 'r')
    liste = [ ln[0:-1] for ln in fich ]
    sans créer de liste intermédiaire puisque fich est directement itérable;


    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fich = open('%s'%fic1, 'r').
    liste = fich . read() . splitlines()
    puisque read() crée un string et que splitlines() découpe un string en éliminant les EOL.

Discussions similaires

  1. Alt Entrée pour Excel avec php
    Par jgoguel dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2008, 16h48
  2. Réponses: 1
    Dernier message: 06/12/2006, 16h24
  3. [VBA Excel] - Copie Aléatoire de données entre 2 feuilles
    Par ethan64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2006, 17h34
  4. [EXCEL] Execution dune macro dans une fonction SI
    Par Sef974 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2006, 13h25
  5. python et excel [win32com] : caractériel ? SOS
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 19/10/2005, 17h24

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