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

Linux Discussion :

Manipulation de paragraphes avec python


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Manipulation de paragraphes avec python
    Bonjour,

    Je possède un fichier contenant des parties d'échecs qui se présente comme suit:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "180+0"]
    [Result "0-1"]
     
    1. f4 d5 2. Nf3 Nf6 3. e3 g6 4. Be2 Bg7 5. O-O O-O 6. h3 c5 7. d3 Nc6 8. g4 
    b6 9. Nh2 Bb7 10. g5 Nd7 11. h4 e5 12. Ng4 exf4 13. Rxf4 Qe7 14. Nh6+ Bxh6 
    15. gxh6 Rae8 16. Qf1 Nd8 17. b3 Ne6 18. Rg4 Ne5 19. Bb2 Nxg4 20. Bxg4 
    Qxh4 21. Qf3 Qxh6 22. Qf6 Qg7 23. Bxe6 Qxf6 24. Bxf6 Rxe6 25. Bg5 f6 26. Bf4 
    g5 27. Bh2 Rxe3 28. Nd2 Rfe8 29. Rf1 Re1 30. Nf3 Rxf1+ 31. Kxf1 d4 32. Kf2 
    Bxf3 33. Kxf3 Re3+ 34. Kg4 Kg7 35. Bb8 a6 36. Ba7 Re6 37. Kf5 Kf7 38. Bb8 
    h5 39. a4 h4 40. Kg4 Kg6 41. Bh2 Re3 42. Bc7 f5# {White checkmated} 0-1
     
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "180+0"]
    [Result "1-0"]
     
    1. e4 Nc6 2. d4 e5 3. d5 Nce7 4. Nf3 d6 5. Bd3 Ng6 6. Nc3 Nf6 7. h3 Be7 
    8. Be3 Bd7 9. Qd2 a5 10. O-O b6 11. Nh2 Qc8 12. Ne2 Nh4 13. Ng3 Nxg2 14. Kxg2 
    Bxh3+ 15. Kg1 Bxf1 16. Rxf1 h5 17. f4 h4 18. Nf5 g6 19. Nxe7 Kxe7 20. Qg2 
    Nh5 21. fxe5 Ng3 22. exd6+ cxd6 23. Bg5+ Kf8 24. Rf3 Rh5 25. Bf6 Qc5+ 26. Qf2 
    Qc8 27. Bc3 Qh3 28. Rxf7+ Kg8 29. Rg7+ Kh8 30. Rxg6+ Kh7 31. Qf7# {Black checkmated} 1-0
     
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "900+0"]
    [Result "1/2-1/2"]
     
    1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. O-O Nxe4 5. Re1 d5 6. Bb5 Qd6 7. d3 Nxf2 
    8. Bxc6+ Qxc6 9. Kxf2 f6 10. Nxe5 fxe5 11. Qh5+ Kd8 12. Bg5+ Kd7 13. Nc3 
    Bc5+ 14. Ke2 Qg6 15. Qg4+ Kc6 16. Qa4+ Kd6 17. Nb5+ Kd7 18. Qg4+ Qe6 19. Qxe6+ 
    Kxe6 20. Nxc7+ Kd6 21. Nxa8 Bg4+ 22. Kd2 Rxa8 23. h3 Bd7 24. Be3 d4 25. Bf2 
    Rc8 26. Rac1 Bb4+ 27. c3 Ba5 28. b4 dxc3+ 29. Rxc3 Bxb4 30. Rc1 b6 31. a3 
    Bxc3+ 32. Rxc3 Rxc3 33. Kxc3 Kd5 34. h4 g6 35. Be3 Bc6 36. g3 Bb5 37. Bg5 
    Bd7 38. Bd8 b5 39. Bc7 Bf5 40. Bb8 a5 41. Bc7 b4+ 42. axb4 axb4+ 43. Kxb4 
    Kd4 44. Kb5 Bxd3+ 45. Kb4 e4 46. Kb3 e3 47. Bb6+ Ke4 48. Kc3 e2 49. Kd2 
    h5 50. Ke1 Kf3 51. Bc7 Bf5 52. Bb8 Bd3 53. Bc7 Bb5 54. Bb8 Kg4 55. Bc7 
    g5 56. hxg5 Kxg5 57. Bb8 Kg4 58. Bc7 {Game drawn by mutual agreement} 1/2-1/2
     
     
    ...
    J'aimerai inverser l'ordre des parties et les stocker dans un autre fichier, seulement je ne sais pas du tout comment m' y prendre avec awk pour réussir à extraire la dernière partie jouée.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 731
    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 731
    Points : 31 054
    Points
    31 054
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Twinings Voir le message
    Bonjour,

    Je possède un fichier contenant des parties d'échecs qui se présente comme suit:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "180+0"]
    [Result "0-1"]
     
    1. f4 d5 2. Nf3 Nf6 3. e3 g6 4. Be2 Bg7 5. O-O O-O 6. h3 c5 7. d3 Nc6 8. g4 
    b6 9. Nh2 Bb7 10. g5 Nd7 11. h4 e5 12. Ng4 exf4 13. Rxf4 Qe7 14. Nh6+ Bxh6 
    15. gxh6 Rae8 16. Qf1 Nd8 17. b3 Ne6 18. Rg4 Ne5 19. Bb2 Nxg4 20. Bxg4 
    Qxh4 21. Qf3 Qxh6 22. Qf6 Qg7 23. Bxe6 Qxf6 24. Bxf6 Rxe6 25. Bg5 f6 26. Bf4 
    g5 27. Bh2 Rxe3 28. Nd2 Rfe8 29. Rf1 Re1 30. Nf3 Rxf1+ 31. Kxf1 d4 32. Kf2 
    Bxf3 33. Kxf3 Re3+ 34. Kg4 Kg7 35. Bb8 a6 36. Ba7 Re6 37. Kf5 Kf7 38. Bb8 
    h5 39. a4 h4 40. Kg4 Kg6 41. Bh2 Re3 42. Bc7 f5# {White checkmated} 0-1
     
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "180+0"]
    [Result "1-0"]
     
    1. e4 Nc6 2. d4 e5 3. d5 Nce7 4. Nf3 d6 5. Bd3 Ng6 6. Nc3 Nf6 7. h3 Be7 
    8. Be3 Bd7 9. Qd2 a5 10. O-O b6 11. Nh2 Qc8 12. Ne2 Nh4 13. Ng3 Nxg2 14. Kxg2 
    Bxh3+ 15. Kg1 Bxf1 16. Rxf1 h5 17. f4 h4 18. Nf5 g6 19. Nxe7 Kxe7 20. Qg2 
    Nh5 21. fxe5 Ng3 22. exd6+ cxd6 23. Bg5+ Kf8 24. Rf3 Rh5 25. Bf6 Qc5+ 26. Qf2 
    Qc8 27. Bc3 Qh3 28. Rxf7+ Kg8 29. Rg7+ Kh8 30. Rxg6+ Kh7 31. Qf7# {Black checkmated} 1-0
     
     
    [Event "?"]
    [Site "?"]
    [Date "?"]
    [Round "?"]
    [White "?"]
    [Black "?"]
    [WhiteElo "?"]
    [BlackElo "?"]
    [TimeControl "900+0"]
    [Result "1/2-1/2"]
     
    1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. O-O Nxe4 5. Re1 d5 6. Bb5 Qd6 7. d3 Nxf2 
    8. Bxc6+ Qxc6 9. Kxf2 f6 10. Nxe5 fxe5 11. Qh5+ Kd8 12. Bg5+ Kd7 13. Nc3 
    Bc5+ 14. Ke2 Qg6 15. Qg4+ Kc6 16. Qa4+ Kd6 17. Nb5+ Kd7 18. Qg4+ Qe6 19. Qxe6+ 
    Kxe6 20. Nxc7+ Kd6 21. Nxa8 Bg4+ 22. Kd2 Rxa8 23. h3 Bd7 24. Be3 d4 25. Bf2 
    Rc8 26. Rac1 Bb4+ 27. c3 Ba5 28. b4 dxc3+ 29. Rxc3 Bxb4 30. Rc1 b6 31. a3 
    Bxc3+ 32. Rxc3 Rxc3 33. Kxc3 Kd5 34. h4 g6 35. Be3 Bc6 36. g3 Bb5 37. Bg5 
    Bd7 38. Bd8 b5 39. Bc7 Bf5 40. Bb8 a5 41. Bc7 b4+ 42. axb4 axb4+ 43. Kxb4 
    Kd4 44. Kb5 Bxd3+ 45. Kb4 e4 46. Kb3 e3 47. Bb6+ Ke4 48. Kc3 e2 49. Kd2 
    h5 50. Ke1 Kf3 51. Bc7 Bf5 52. Bb8 Bd3 53. Bc7 Bb5 54. Bb8 Kg4 55. Bc7 
    g5 56. hxg5 Kxg5 57. Bb8 Kg4 58. Bc7 {Game drawn by mutual agreement} 1/2-1/2
     
     
    ...
    J'aimerai inverser l'ordre des parties et les stocker dans un autre fichier, seulement je ne sais pas du tout comment m' y prendre avec awk pour réussir a extraire la dernière partie jouée.
    1) pourquoi parler d'"extraire la dernière partie" alors que tu veux inverser les parties ? Autant faire un programme qui parse ton fichier et qui enregistre les parties en mémoire pour ensuite les recracher dans l'ordre qui te convient
    2) pourquoi parler de "awk" ? Si tu as un problème alors tu dois commencer par envisager quels sont les outils les plus adaptés au lieu de partir bille en tête sur un outil qui ne l'est pas forcément. Par exemple, si moi je devais faire ça, alors je le ferais en Python

    Exemple tapé vite fait en prenant ton fichier comme base
    Code Python : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/env python
    # -*- coding: utf-8 *-*
     
    import sys
     
    tabGame=[]
    ficIn=sys.argv[1]
    ficOut="%s.reverse" % ficIn
     
    # Récupération parties
    fp=open(ficIn, "r")
    for lig in fp:
    	if lig[0:6] == "[Event":
    		tabGame.append([])
    	tabGame[-1].append(lig)
    # for
    fp.close()
    print "Récupéré %d parties" % len(tabGame)
     
    # Inversion
    tabGame.reverse()
     
    # Ecriture
    fp=open(ficOut, "w")
    for game in tabGame:
    	for lig in game:
    		fp.write(lig)
    	# for
    # for
    fp.close()

    Tu sauvegardes ce script dans un fichier "script.py" puis tu l'exécutes en lui passant en paramètre le nom "fic" de ton fichier. Il te génèrera un fichier "fic.reverse" contenant tes parties inversées...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Sve@r,

    Ta solution fonctionne a merveille.
    Pour répondre à ta question, je dois dire que je n'étais pas sûr du tout de la méthode à utiliser, je pensais que awk serait suffisant et je ne connais que très peu python, je n' y ai donc pas pensé.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 731
    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 731
    Points : 31 054
    Points
    31 054
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Twinings Voir le message
    Merci Sve@r,

    Ta solution fonctionne a merveille.
    Ouais enfin j'utilise le mot clef "[Event" comme flag de début de partie ce qui n'est pas forcément des plus adéquats (on n'est pas certain que le fichier sera tout le temps ainsi) mais je vois pas trop comment faire autrement.

    Citation Envoyé par Twinings Voir le message
    je pensais que awk serait suffisant
    Ben awk est très fort pour analyser et traiter une ligne... mais le pb c'est que toi il te fallait mémoriser plusieurs lignes et ça, je suis pas certain qu'il sache le faire...

    Citation Envoyé par Twinings Voir le message
    et je ne connais que très peu python
    Je l'ai découvert il y a 3 ans et depuis, je ne jure que par lui. Il m'arrive même de refaire certains scripts shell en Python. Et donc puisque tu le connais "un peu" c'est l'occasion de t'y mettre "beaucoup"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/05/2015, 08h05
  2. Réponses: 10
    Dernier message: 04/01/2015, 18h13
  3. Comment récuperer et manipuler la sortie de TreeTagger avec Python ?
    Par Derfh dans le forum Statistiques, Data Mining et Data Science
    Réponses: 0
    Dernier message: 30/12/2014, 13h56
  4. manipulation d'image avec python
    Par Jam8879 dans le forum Calcul scientifique
    Réponses: 7
    Dernier message: 20/01/2014, 09h15
  5. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14

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