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 :

Convertir une chaine de caractère en tableau


Sujet :

Python

  1. #1
    Membre régulier Avatar de Mysti¢
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 116
    Points
    116
    Par défaut Convertir une chaine de caractère en tableau
    Bonsoir, j'ai essayé de différentes façon de convertir une chaine de caractère en tableau (type= list).
    Les données que je veux récupérer sont en faite sous forme de tableaux.
    (un tablau par ligne)

    Concrètement:

    Code data.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ['Serveur1', 'Serveur2']
    ['127.0.0.1', '127.0.0.2']
    ['80', '21']
    ['ServeurHTTP', 'ServeurFTP']
    A la ligne 1: le nom du serveur, ligne 2: adresse ip, ligne 3: port et ligne 4: note ou information supplémentaire.


    Avec ça j'ai un résultat presque convenable:

    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
        def recuperer_donnees(self, evt):
    		try:
    			fs = file("data.txt", "r") #On ouvre le fichier qui contient les données des serveur enregistrés (mode lecture)              
    			data = fs.read() #On attibue la chaine de caractère que contient le fichier à la variable "data"
    			tab_data = data.split("\n")	#On cree un tableau avec quatre sous tableaux contenant les informations (nom, adresse, port et infos des différents serveurs)		
     
    			self.nom = tab_data[0]	
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
    			#On converti la chaîne de caractère self.nom en tableau pour pouvoir gérer les entrées plus simplement par la suite
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
    			temp_nom = "".join(self.nom)
    			temp_nom = temp_nom.replace("'","")
    			temp_nom = temp_nom.replace("[","")
    			temp_nom = temp_nom.replace("]","")
    			temp_nom = temp_nom.replace(",","")
    			self.nom = temp_nom.split(' ')
     
    			self.adresse = tab_data[1]
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
     
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
    			temp_adresse = "".join(self.adresse)
    			temp_adresse = temp_adresse.replace("'","")
    			temp_adresse = temp_adresse.replace("[","")
    			temp_adresse = temp_adresse.replace("]","")
    			temp_adresse = temp_adresse.replace(",","")
    			self.adresse = temp_adresse.split(' ')
     
    			self.port = tab_data[2]
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
     
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
    			temp_port = "".join(self.port)
    			temp_port = temp_port.replace("'","")
    			temp_port = temp_port.replace("[","")
    			temp_port = temp_port.replace("]","")
    			temp_port = temp_port.replace(",","")
    			self.port = temp_port.split(' ')
     
     
    			self.note = tab_data[3]
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
     
    			#------------------------------------------------------------------------------------------------------------------------------------------------------
    			temp_note = "".join(self.note)
    			temp_note = temp_note.replace("'","")
    			temp_note = temp_note.replace("[","")
    			temp_note = temp_note.replace("]","")
    			temp_note = temp_note.replace(",","")
    			self.note = temp_note.split(' ')
    			#--------------------------------------------------------------------------------------------------------------------------------------		
    			#--------------------------------------------------------------------------------------------------------------------------------------		
    		except: 
    			""
    Donc en faite je m'embête à découper des chaines de caractère pour en faire des tableaux.
    Encore si ça fonctionnait, ca serait une solution ( bien que sa fasse "lourd"),
    mais comme le découpage se fait en fonction des guillemets et espaces qu'on retrouve dans un tableau, si la chaine de caractère contient un des même symbole, la fonction n'est plus d'aucune utilité.

    C'est à dire que si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.recuperer_donnees(self)
    print self.nom[0]
    J'arriverai à récupérer correctement la première entrée du tableau : Serveur1
    Mais si elle contenait un espace 'Serveur 1'
    Le résultat affiché ne serait plus correcte puis ce qu'au niveau de la fonction de "decoupage de la chaine" il y aurait eu un problème :s


    Si quelqu'un peux m'aider ou à une solution qui serai moins "bidouillage" que mon code, merci.
    ''' Life is short, use Python '''
    Business En Ligne
    SearchEngineFight

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    liste = []
     
    for ligne in open('data.txt'):
        liste.extend(eval(ligne))
     
    for item in liste:
        print item
    Cela fonctionne si les guillemets sont bien present (j'ai une erreur avec tes datas, il manque un guillemet après serveurHTTP)
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre régulier Avatar de Mysti¢
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 116
    Points
    116
    Par défaut
    Ok ca c'est pas dans le code, mais c'etait pour l'exemple, faute de frappe :p. ( message édité)
    Merci, je vais essayer.
    ''' Life is short, use Python '''
    Business En Ligne
    SearchEngineFight

  4. #4
    Membre régulier Avatar de Mysti¢
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 116
    Points
    116
    Par défaut
    Ca fonctionne, mais j'aurais voulu garder mes sous tableaux, parce qu'en faite pour récupérer les entrées correspondante, j'utilisait la fonction suivante:

    event.GetString() est égal au nom du serveur sélectionné
    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
        def EvtListBox(self, event):
            self.recuperer_donnees(self)        
            nomserveur = "%s" % event.GetString()
            y = 0
            while y < 1:
                x = 0
                while self.nom[x] != nomserveur:
                    x+=1
                y+=1
     
            fulladd = "%s:%s" % (self.adresse[x], self.port[x])	
            self.ServerName.SetValue("%s" % event.GetString())			    
            self.ServerAddress.SetValue("%s" % self.adresse[x])
            self.ServerPort.SetValue("%s" % self.port[x])	
            self.ServerFullAdd.SetValue("%s" % fulladd)

    C'est à dire que tant que la variable nomserveur est différente de self.nom[x], on incrémente x sinon la boucle continue.
    ça me permet donc par la suite de récupérer les ports et autres informations correspondante.

    exemple en simplifiant le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nom  = ['Serveur1', 'Serveur2']
    adresse = ['127.0.0.1', '127.0.0.2']
    port = ['80', '21']
     
    print nom[x], adresse[x], port[x]
    donc ma fonction me retourne par exemple si y et x = 1:
    Serveur2 127.0.0.2 21

    si x était egale à 0:
    Serveur1 127.0.0.1 80

    Ce que je cherche à faire, c'est convertir chaque ligne de mon fichier data.txt en "vrai" tableau et de stocké ses derniers dans des variables différentes.
    Code data.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ['Serveur1', 'Serveur2']
    ['127.0.0.1, '127.0.0.2']
    ['80', '21']
    ['ServeurHTTP', 'ServeurFTP']
    Si dans ma fonction j'utilise "SetValue" c'est en faite pour donner la valeur que je veux à un élément "wx.TextCtrl" (module wxPython)

    Un aperçu de ce que ca donne avec l'interface:
    ''' Life is short, use Python '''
    Business En Ligne
    SearchEngineFight

  5. #5
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ nom, adresse, port, note] = [eval(ligne) for ligne in open('data.txt')]
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  6. #6
    Membre régulier Avatar de Mysti¢
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 116
    Points
    116
    Par défaut
    Encore merci, c'est tout à fait ce que je recherchais
    Résolu
    ''' Life is short, use Python '''
    Business En Ligne
    SearchEngineFight

  7. #7
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Encore merci
    De rien.

    pour info, tu peux utiliser event.GetSelection() pour recuperer l'indice de l'element choisi dans la listBox,
    cela evite les boucles pas très pythoniques

    Bonne continuation
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  8. #8
    Membre régulier Avatar de Mysti¢
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 155
    Points : 116
    Points
    116
    Par défaut
    Okay thks je vais utiliser ça alors
    ''' Life is short, use Python '''
    Business En Ligne
    SearchEngineFight

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/10/2007, 13h51
  2. Réponses: 11
    Dernier message: 08/06/2007, 20h19
  3. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. [XSL] Convertir une chaine de caractère
    Par bahet dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2006, 10h24

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