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 :

Espaces non compilés [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Espaces non compilés
    Bonjour,

    Je travaille sur un tableau où les valeurs sont séparées par un certain nombre d'espaces. J'aimerais n'avoir qu'un seul espace comme tabulation pour récupérer facilement mes données. Pour cela j'ai utilisé une expression régulière mais ça ne fonctionne pas :



    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
     
     
    import re
    def parsing(entree, sortie):
        inp=open(entree, "r")
        out=open(sortie, "w")
        line = inp.readline()
     
        p = re.compile("\s{2,}")
     
        out.write("Scaffold\tDomaine\tScore\tE-value\n")
     
        for line in inp:
            if line[0] == "#":
                continue
            line = p.sub(r" ", line)
     
            if '>>' in line :
                scaffold = list(line.split(" "))
                line = inp.readline()
                line = inp.readline()
                line = inp.readline()
     
                colonne = list(line.split(" "))
     
                out.write("\t".join(list([scaffold[1], colonne[3], colonne[6], colonne[13]])) + "\n")
                line = inp.readline()
    Est-ce que quelqu'un aurait une idée de ce qui ne va pas ?

    Merci à vous

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par plikplak06 Voir le message
    Est-ce que quelqu'un aurait une idée de ce qui ne va pas ?
    Si la question est de valider que la ligne 16: line = p.sub(r" ", line) fait ce que vous attendez.... çà devrait fonctionner.
    Sauf à montrer un exemple ou çà ne marche pas.

    Mais votre code ne fait pas que çà... donc "ce qui ne va pas" est peut être à expliquer un peu: un message d'erreur? Une sortie différente de celle attendue?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    En fait lorsque je fais un print(line) à la ligne 17 les espaces sont toujours là : Nom : Annotation 2020-07-09 150907.jpg
Affichages : 105
Taille : 17,1 Ko

    Du coup ce ne sont pas les bonnes colonnes qui sont affichées dans mon tableau, et comme le nombre d'espace entre chaque colonne n'est pas toujours identique je ne peux pas vraiment adapter les numéros de colonne à choisir

    Est-ce que vous avez besoin de voir mon fichier d'entrée ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    La sortie (ce qu'affiche print) que vous montrez est, à priori, une liste.
    Or à la ligne 17, line devrait encore être une chaîne de caractères où ont été remplacés les répétitions d'espaces.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    D'accord je comprends tout à fait, mais même en mettant un print(line) à la ligne 25 on continue d'avoir pleins d'espaces : Nom : Annotation 2020-07-09 163950.jpg
Affichages : 128
Taille : 6,3 Ko
    Pourtant on a dépassé la ligne où les espaces sont remplacés puis celle où la ligne est scindée ...

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par plikplak06 Voir le message
    Pourtant on a dépassé la ligne où les espaces sont remplacés puis celle où la ligne est scindée ...
    Certes mais ligne 22 et précédentes line a été écrasé par des lectures où les espaces ne sont pas remplacés...
    Pour l'instant, "supprimer les espaces" fonctionne mais le reste du code qui oublie de le faire (et n'est pas très clair sur ce que vous voulez faire).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par plikplak06 Voir le message
    [...] les valeurs sont séparées par un certain nombre d'espaces. J'aimerais n'avoir qu'un seul espace [...]


    Je pense que vous n'utilisez pas la méthode sub correctement, liens et exemple :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # https://docs.python.org/3/library/re.html#re.sub
    # re.sub(pattern, repl, string, count=0, flags=0)
     
    pattern = re.compile(r"\s{2,}")
    repl = r" "
    texte = 'Un texte  avec   des     espaces    irréguliers'
     
    result = re.sub(pattern, repl, texte)
     
    print(result) # Un texte avec des espaces irréguliers

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Je pense que vous n'utilisez pas la méthode sub correctement,
    Pourquoi "penser" au lieu de vérifier que la construction utilisée fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> line = 'aa.xx   bb     cc'
    >>> p = re.compile("\s{2,}")
    >>> p.sub(' ', line)
    'aa.xx bb cc'
    puis aller revisiter la documentation de re.compile:

    Compile a regular expression pattern into a regular expression object, which can be used for matching using its match(), search() and other methods, described below.
    The expression’s behaviour can be modified by specifying a flags value. Values can be any of the following variables, combined using bitwise OR (the | operator).
    The sequence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        prog = re.compile(pattern)
        result = prog.match(string)
    is equivalent to

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        result = re.match(pattern, string)
    but using re.compile() and saving the resulting regular expression object for reuse is more efficient when the expression will be used several times in a single program.

    pour conclure que non seulement çà fonctionne mais qu'en plus c'est bien documenté.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Super, merci beaucoup à vous pour votre aide !

  10. #10
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pourquoi "penser" au lieu de vérifier que la construction utilisée fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> line = 'aa.xx   bb     cc'
    >>> p = re.compile("\s{2,}")
    >>> p.sub(' ', line)
    'aa.xx bb cc'
    puis aller revisiter la documentation de re.compile:

    pour conclure que non seulement çà fonctionne mais qu'en plus c'est bien documenté.

    - W
    @wiztricks : c'est parce que j'ai testé et vu que cela semblait fonctionner que j'ai écrit "je pense" au lieu de "je suis certain".

    C'est la documentation officielle qui est censée montrer le bon exemple !

    J'ai pris soin de donner mon exemple précédé des liens vers la documentation :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # https://docs.python.org/3/library/re.html#re.sub
    # re.sub(pattern, repl, string, count=0, flags=0)

    Vous dites que la méthode alternative est documentée https://docs.python.org/3/library/re.html#re.compile, mais je ne vois qu'un exemple avec la méthode match !

    EDIT

    En relisant soigneusement, avec la version FR, je constate que match peut être remplacé par une autre méthode.
    Donc, comme d'habitude vous avez raison !

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. [Tomcat/Struts]non compilations des classes!
    Par jazer dans le forum Struts 1
    Réponses: 9
    Dernier message: 11/07/2006, 14h03
  2. Décompilateur JAVA génère du source non compilable
    Par the java lover dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 3
    Dernier message: 04/07/2006, 17h14
  3. astuce pour pointer sur espace non déclaré web
    Par mussara dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/04/2006, 23h23
  4. probleme d'espace non voulu entre 2 bloc
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 16h07
  5. [JDOM] espaces non sauvés
    Par Piolet dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 26/11/2004, 18h53

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