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 :

Modifier une chaine


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Modifier une chaine
    bonjour

    J'ai un fichier que je lis sans problème. Se fichier est un fichier dit plat .
    Je lis le fichier et charge un objet


    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
    class type_a(object):
        '''
        Typea
        '''
     
        def __init__(self):
            self.FUTYLIGN = None
            self.FUNOMPAR = None
            self.FUCODPAR = None
            self.FUTSUPPO = None
            self.FUTd = None
     
        def Lecture_fichier(self,lnsrc):        
            self.FUTYLIGN = lnsrc[0:3]
            self.FUNOMPAR = lnsrc[3:18]
            self.FUCODPAR = lnsrc[18:24]
            self.FUTSUPPO = lnsrc[24:75]
            self.FUTd = lnsrc[76:8500]
     
        def __str__(self):
            resultat=self.FUTYLIGN
            resultat+=self.FUNOMPAR
            resultat+=self.FUCODPAR
            resultat+=self.FUTSUPPO
            resultat+= self.FUTd
     
     
     
    Le_type_a = type_a()
     
     
    # Base Application
    if __name__ == '__main__':
     
            with open("mon_fichier", 'r') as fichier: 
     
                # traitement du fichier
                for ligne in fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                           Le_type_a.FUTSUPPO ="toto"
                                  ligne[76:1000]= "okapi"
    soucis python renvoi
    TypeError: 'type_a' object does not support item assignment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                           Le_type_a.FUTSUPPO ="toto"
                                  ligne[24:75]= "toto"
    avec ce code je perd les espaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                            self.FUTSUPPO = "toto"
    alors oui une solution serait un calcul de longueur et de recompléter par des blancs mais existe til une autre solution ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par dedalios Voir le message
    alors oui une solution serait un calcul de longueur et de recompléter par des blancs mais existe til une autre solution ?
    Ca serait bien de poster un code qui permette:
    • de voir la ligne à laquelle se rapporte l'erreur mentionnée,
    • de reproduire le problème constaté.


    "TypeError: 'type_a' object does not support item assignment", c'est lorsqu'on exécute, par exemple, Le_type_a[...] = ... : pas de trace dans le code!
    Et de plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                   if(Le_type_a.FUCODPAR == '0001' ):
                           Le_type_a.FUTSUPPO ="toto"
                                  ligne[76:1000]= "okapi"
    ligne étant une chaîne de caractères, c'est immutable, donc ligne[76:1000]= "okapi" va planter.
    et dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                   if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                            self.FUTSUPPO = "toto"
    "self" sort de nulle part...

    Un peu de rigueur... d'autant qu'au final la question porte sur la modification d'une chaîne de caractères (non-mutable): un exemple de son contenu avant et de ce qu'elle devrait contenir après serait suffisant (et bien plus simple pour décrire le soucis).

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

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut self.FUTSUPPO
    mauvaise recopi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
                    if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                            self.FUTSUPPO = "toto"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
                    if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                            Le_type_a.FUTSUPPO = "toto"
    Un peu de rigueur... d'autant qu'au final la question porte sur la modification d'une chaîne de caractères (non-mutable): un exemple de son contenu avant et de ce qu'elle devrait contenir après serait suffisant (et bien plus simple pour décrire le soucis).
    La chaine modifer "Maxim le Grand de Set"

    Oui une solution serait d'avoir chaque chaine de 51 Caractères avant modification et chaque chaine de 51 Caractères modifier ,et de d'utiliser la solution de remplacement sur l'intégralité de la ligne
    Problème que ce passe t'il si sur l’intégralité de cette variable ligne la chaine est présente plusieurs fois



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                   if(ligne[0:3] == "aaa"):
                        Le_type_a.Lecture_fichier(ligne)
                        if(Le_type_a.FUCODPAR == '0001' ):
                        ligne[24:75]= "toto"
    l'erreur est sur

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Relisez vous avant de poster.

    Essayez de comprendre que résoudre un problème, c'est commencer par l'exposer clairement, surtout si c'est pour demander de l'aide.

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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par dedalios Voir le message
    l'erreur est sur
    Hé oui, ce genre d'opération est interdite. Une chaine est un truc dit "immuable" donc non modifiable.
    La seule chose que tu puisses faire, c'est recréer une nouvelle chaine à partir de l'ancienne. Tout en sachant que rien ne t'interdit de remettre aussi la nouvelle chaine dans l'ancienne => ligne=ligne[:24] + "toto" + ligne[75:].

    Et on n'est pas en C => tu n'es pas obligé d'encadrer tes tests de parenthèses. if ligne[0:3] == "aaa" fonctionne tout aussi bien que if(ligne[0:3] == "aaa") et l'aération de l'écriture rend celle-ci plus lisible.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Hé oui, ce genre d'opération est interdite. Une chaine est un truc dit "immuable" donc non modifiable.
    Si c'était la question, la réponse a déjà été donnée: pourquoi la reposer? Et surtout qu'apportent les autres informations?

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

Discussions similaires

  1. Fonction qui modifie une chaine de caractère
    Par condor_01 dans le forum Débuter
    Réponses: 7
    Dernier message: 05/11/2007, 18h32
  2. Réponses: 1
    Dernier message: 10/04/2007, 23h29
  3. [VB.NET] Modifier une chaine de connextion
    Par hemipsy dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/12/2006, 12h38
  4. Modifier une chaine de caractères lue dans une DB
    Par shinryu69 dans le forum Langage
    Réponses: 4
    Dernier message: 31/10/2006, 13h40
  5. Modifier une chaine de caractères ?
    Par Arkadius dans le forum Oracle
    Réponses: 2
    Dernier message: 13/04/2006, 16h21

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