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 :

Remplacer les espaces dans un texte


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut Remplacer les espaces dans un texte
    Bonjour à tous,

    Je suis complètement nouveau en programmation et en Python. Je souhaite faire un programme pour me modifier le contenu d'un fichier cvs. J'ai utilisé un morceau de code trouvé sur ce site, mon problème est le suivant : je souhaite supprimer des "espaces".

    Voici la structure du fichier :
    Carrelage Faïence;CARRELAGE – FAIENCE;- Contrôle visuel de l’état des ouvrages;0,5;1;0,5

    je souhaite remplacer : ";- "(10 espaces) par ";" mais le code suivant ne lit pas les espaces.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fichier=open("D:\Gammes_Preventive_v1.csv", "r")
    contenu=fichier.read() #Lit tout le fichier d'un coup
    index = { ';-          ' : ';' }
    for cle in index:
              contenu=contenu.replace(cle, index[cle])
     
    print contenu
    Lorsque je lance le code il ne voit pas les espaces ? Comment Faire ?

    Merci.

  2. #2
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    J'ai mis ton code et cela marche du premier coup avec 10 espaces après le ;-
    Peux tu mettre un vai exemple de ton fichier csv (y a t il bien 10 espaces)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle visuel de l’état des ouvrages;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle visuel de l’état des ouvrages;0,5;1;0,5
    J'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle visuel de l’état des ouvrages;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle visuel de l’état des ouvrages;0,5;1;0,5

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci de ta réponse alexdevl, mais chez moi ça ne fais rien. Je précise que je suis sous Win XP PRO, j'utilise PyScripter. Voici une plus grosse partie du fichier comme demandé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Type;Ensemble;Gammes;Tps;Freq;T
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle visuel de l’état des ouvrages;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle des joints et raccords;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle de la fonction anti-dérapante des éléments ;0,5;4;2
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Contrôle de la bonne tenue des équerres à transition progressive;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;-          Réfection si nécessaire;;;
    Carrelage Faïence;COUVRE JOINT DE DILATATION;-          Contrôle visuel de la tenue ;0,05;1;0,05
    Carrelage Faïence;TAPIS BROSSE;-          Contrôle de la fixation des cadres de tapis de sol;0,05;1;0,05
    Carrelage Faïence;TAPIS BROSSE;-          Contrôle visuel de l’état des tapis;0,05;1;0,05
    Carrelage Faïence;TRAPPES METALLIQUES;-          Contrôle et graissage approprié des fermetures ;;;
    Il s'agit des premières lignes du fichier

    Merci

  4. #4
    Membre averti
    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
    Points : 396
    Points
    396
    Par défaut
    Je ne sais pas si c'est la bonne méthode, mais je ferais une boucle For pour supprimer le code ASCII 32 (espace), ou remplacer les code ASCII 32 par rien.

    du style ; Si variable = " " alors variable = ""

    Ensuite reconstruire la ligne.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci de ta réponce Gamal mais quel est l'avantage d'une telle méthode ? et puis comment reconstruire ?

  6. #6
    Membre averti
    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
    Points : 396
    Points
    396
    Par défaut
    Avec une boucle For tu controle ta "chaine" de caractères et tu construis dans une "newchaine" une chaine sans espaces.

    " Dans chaine, si caractère n'est pas espace alors dans newchaine."

    C'est une simple boucle For avec un teste dedans. Une variable est la ligne que tu testes, l'autre est la chaine que tu crées.

    Si ton fichier est lourd, cela peut être long.

  7. #7
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    J'ai le meme os et j'obtient cela avec ton code (qui est très bien)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Type;Ensemble;Gammes;Tps;Freq;T
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle visuel de l’état des ouvrages;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle des joints et raccords;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle de la fonction anti-dérapante des éléments ;0,5;4;2
    Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle de la bonne tenue des équerres à transition progressive;0,5;1;0,5
    Carrelage Faïence;CARRELAGE – FAIENCE;Réfection si nécessaire;;;
    Carrelage Faïence;COUVRE JOINT DE DILATATION;Contrôle visuel de la tenue ;0,05;1;0,05
    Carrelage Faïence;TAPIS BROSSE;Contrôle de la fixation des cadres de tapis de sol;0,05;1;0,05
    Carrelage Faïence;TAPIS BROSSE;Contrôle visuel de l’état des tapis;0,05;1;0,05
    Carrelage Faïence;TRAPPES METALLIQUES;Contrôle et graissage approprié des fermetures ;;;

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Cool alexdev, c'est exactement le résultat que je cherche à obtenir...mais sur ma machine. Chez moi il n'y a aucune différence entre avant et après le script

    je vais donc poursuivre mes recherches, toutes les idées sont bienvenues

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    alexdev pour tester mon code as tu simplement fais un copier / coller ? as tu utilisé le même nom de fichier sur le même lecteur ?

  10. #10
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    bonjour,

    par simple curiosité as-tu bien vérifié tes droits d'accès en écriture sur ton fichier?
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Salut Tux++

    Je suis sous Windows, je ne pense pas qu'il y ait de gestion de droit d'accès au niveau du fichier, j'ai quand même vérifié et voici le résultat de la fonction propriété (clic droit souris) sur le fichier (en pièce jointe)
    Images attachées Images attachées  

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    salut,

    precision : je suis un grand débutant aussi.....

    j'utilise dans mon premier script, le module string avec sa methode replace.

    a="Carrelage Faïence;CARRELAGE – FAIENCE;- Contrôle visuel de l’état des ouvrages;0,5;1;0,5"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import string
    i.replace(";-          ", ";")
    print i
    qui donne


    a=[Carrelage Faïence;CARRELAGE – FAIENCE;Contrôle visuel de l’état des ouvrages;0,5;1;0,5]

  13. #13
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    C'est donc que le problème est ailleurs dans le code... peut-être ne réecris-tu pas le fichier avec les nouvelles donnés tout bêtement...

  14. #14
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut jouclar
    Si tu n'obtiens pas un contenu modifié du fichier dans la variable contenu, c'est peut être parce que le nombre de blancs dans
    dans ton code est en réalité différent du nombre de blancs existant à l'endroit visé dans le fichier.
    Si j'étais toi, je commencerais par vérifier ça.



    Ensuite, le code du premier message est mauvais à mon avis.

    index est un dictionnaire à un seul item.
    L'instruction
    est donc équivalente à
    D'autre part, on ne voit vraiment pas ce qu'apporte index. Il suffit de mettre ';-(10blancs)' et ';' directement dans le replace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contenu=contenu.replace(';-          ',';')



    Personnellement, travailler sur un long string contenant des \n me trouble l'esprit. Je préfère travailler avec une liste de lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fichier=open("D:\Gammes_Preventive_v1.csv", "r")
    contenu = fichier.read().splitlines()
     
    for ln in contenu:
        if ln.count(';-          ')==1:
            ln = ln.replace(';-          ',';')
     
    print contenu
    S'il peut y avoir plusieurs fois ';-(10blancs)' dans une ligne, il faut modifier en fonction de ce qu'on veut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ln.count(';-          ') > 1:


    readlines() crée une liste de lignes en gardant les \n au bout des lignes

    read() crée un string
    splitlines() découpe un string pour obtenir une liste de lignes sans garder les \n en bout de ligne.

Discussions similaires

  1. [CR 2008] remplacer les 'crlf' par des espaces dans un texte de "type" RTF
    Par digitfree dans le forum Formules
    Réponses: 5
    Dernier message: 02/04/2013, 11h18
  2. [VBA-A]Remplacer les espaces dans un champ texte
    Par Ericka dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/05/2006, 15h31
  3. Remplacement des espaces dans les valeur d'un tableau
    Par calimero642 dans le forum Langage
    Réponses: 10
    Dernier message: 12/05/2006, 18h56
  4. [Tableaux] remplacer les espaces dans URL
    Par jmjmjm dans le forum Langage
    Réponses: 9
    Dernier message: 02/03/2006, 11h26
  5. [HTML] formulaire gérer les espaces dans un champs texte
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h17

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