Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1024 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  récupérer les donnees d'un fichier ds 1 tableau python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupérer les donnees d'un fichier ds 1 tableau python

n°1710085
tsic
Posté le 31-03-2008 à 09:27:35  profilanswer
 

Bonjour,
Dans la communication serveur client que je traite je veux faire de telle sorte que lorsque le client envoye une commande le serveur lui envoie la réponse appropriée.
 
Les commandes et les réponses appropriées seront stockées dans un fichier .txt.
 
Au démarage du serveur, il doit stocker les données qui se trouvent dans le fichier txt dans un tableau pour faciliter la recherche des commandes en cas où plusieurs clients sont connectés en meme temps et envoyent ces commandes d'une façon disant simultanées.
 
 
Comment le faire? (importation des donnees vers le tableau .....)
Quel code dois-je utiliser?
 
Merci pour votre aide. :jap:

mood
Publicité
Posté le 31-03-2008 à 09:27:35  profilanswer
 

n°1710113
masklinn
í dag viðrar vel til loftárása
Posté le 31-03-2008 à 10:45:28  profilanswer
 

wat?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1710166
tsic
Posté le 31-03-2008 à 11:25:03  profilanswer
 

le probleme tout implement comment mettre des donnees stockées dans un fichier dans un tableau(ou matrice)
ces donnees sont partagées en cmd,reponses

n°1710168
masklinn
í dag viðrar vel til loftárása
Posté le 31-03-2008 à 11:25:34  profilanswer
 

file, read, split, csv, ...


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1710947
tsic
Posté le 01-04-2008 à 13:03:30  profilanswer
 

voilà, j'ai travaillé dur pour trouver la solution. Tout le monde peut en profiter maintenent.
Voici le code:
 
 
print "recopier un fichier dans le format est chaine#chaine"
fs = open("benj.txt","r" )
l=[]
 
 
for ligne in file("benj.txt" ):
    i=0
    c1=""
    c2=""
    while i<len(ligne) and ligne[i]!="#":
        c1=c1+ligne[i]
        i=i+1
 
    i=i+1
     
    while i<(len(ligne)):
        c2=c2+ligne[i]
        i=i+1
     
    l.append( [c1] )
    l.append([c2.strip()])
fs.close()
print l
 
 :hello:

n°1711041
masklinn
í dag viðrar vel til loftárása
Posté le 01-04-2008 à 15:20:51  profilanswer
 

tsic a écrit :

voilà, j'ai travaillé dur pour trouver la solution. Tout le monde peut en profiter maintenent.
Voici le code:

 
Code :
  1. fs = open("benj.txt","r" )
  2. ..
  3. for ligne in file("benj.txt" ):



là tu ouvres ton fichier deux fois de suite [:pingouino]

 
Code :
  1. i=0
  2.    c1=""
  3.    c2=""
  4.    while i<len(ligne) and ligne[i]!="#":
  5.        c1=c1+ligne[i]
  6.        i=i+1
  7.  
  8.    i=i+1
  9.    
  10.    while i<(len(ligne)):
  11.        c2=c2+ligne[i]
  12.        i=i+1


C'est censé faire quoi ce truc moche?


Message édité par masklinn le 01-04-2008 à 15:21:07

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711402
tsic
Posté le 02-04-2008 à 10:03:51  profilanswer
 

la premiere boucle c pour recuperer le premiere chaine la deusieme pour la chaine situant après #
Car mon fichier txt est sous la forme:
chaine1#chaine2
cmdClient#repServeur
 

n°1711405
masklinn
í dag viðrar vel til loftárása
Posté le 02-04-2008 à 10:08:03  profilanswer
 

tsic a écrit :

la premiere boucle c pour recuperer le premiere chaine la deusieme pour la chaine situant après #
Car mon fichier txt est sous la forme:
chaine1#chaine2
cmdClient#repServeur
 


 [:prozac]

 

http://docs.python.org/dev/library [...] #str.split

 

Au final, ton truc ça doit être l'équivalent d'un truc du style:

Code :
  1. print [line.split('#') for line in file("benj.txt", "r" )]
 

Python c'est pas du C, t'es pas obligé de tout faire à la main tu sais


Message édité par masklinn le 02-04-2008 à 10:10:48

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711437
masklinn
í dag viðrar vel til loftárása
Posté le 02-04-2008 à 10:33:06  profilanswer
 

Au fait, ton commentaire en première ligne du script c'est pas du français, et ça ne veut rien dire.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1711520
tsic
Posté le 02-04-2008 à 11:41:29  profilanswer
 

ok  
merci
Maintenant c'est le code principal,
C'est le code d'un serveur python. Je veux que lorsque le client envoie une cmd le serveur lui repond le contenue de la case suivante à la case de la liste convenable à sa demande.
Le probleme est que à la 2eme classe de ce code la liste n'est pas identifier de telle sorte qu'à chaque fois que le client envoie sa demande le message envoyé est tjs "cmd erronnee"
aidez moi SVP à trouver la solution.
Merci
 
 
 
Code python :  

Code :
  1. from socket import *
  2. import socket, sys, threading
  3. import SocketServer
  4. import time
  5. import locale
  6.  
  7. class tel():
  8.    
  9.     print "recopier un fichier en eliminant les lignes de remarques"
  10.     fs = open("benj.txt","r" )
  11.     l=[]
  12.  
  13.  
  14.     for ligne in file("benj.txt" ):
  15.         i=0
  16.         c1=""
  17.         c2=""
  18.         while i<len(ligne) and ligne[i]!="#":
  19.             c1=c1+ligne[i]
  20.             i=i+1
  21.  
  22.         i=i+1
  23.    
  24.         while i<(len(ligne)):
  25.             c2=c2+ligne[i]
  26.             i=i+1
  27.    
  28.         l.append(c1)
  29.         l.append(c2.strip())
  30.     fs.close()
  31.     print l
  32.  
  33.  
  34. class GestionnaireEcho(SocketServer.BaseRequestHandler):
  35.  
  36.     def handle(self):
  37.        
  38.         locale.setlocale(locale.LC_ALL,'')
  39.         c= time.strftime('%A %c')
  40.         print "Connexion de ", self.client_address,c
  41.         while True:
  42.             donneesRecues = self.request.recv(8192)
  43.             t=time.strftime("%H:%M:%S" )
  44.             print "\n C ",t, "> ", donneesRecues
  45.             dr=str(donneesRecues)
  46.             try:
  47.                 ind=l.index(dr)
  48.                 print ind
  49.                 msg= str(l[ind+1])
  50.             except:
  51.                 msg="commande erronee"
  52.            
  53.             self.request.send(msg)
  54.            
  55.         print "Deconnexion de ", self.client_address
  56.  
  57.  
  58. mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  59. tel()
  60. try:
  61.     serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho)
  62. except socket.error:
  63.     print "La liaison du socket a l'adresse choisie a echoue."
  64.     sys.exit()
  65.  
  66. print "En attente..!!!!"
  67.    
  68.  
  69. serveur.serve_forever()


 
pour la classe tel() je vais la changer  comme vous m'avez dit.
mais ça reste pour l'identification de la liste l dans la 2eme classe.

mood
Publicité
Posté le 02-04-2008 à 11:41:29  profilanswer
 

n°1711855
_mumu_
Posté le 03-04-2008 à 00:48:29  profilanswer
 

Déjà un rapide cours sur la programmation objet : http://www.commentcamarche.net/poo/poointro.php3
Car vu la façon dont tu fais tes "classes", je pense qu'un rappel s'impose.
 
Ensuite, normal que tu passe toujours dans l'exception, car ligne 47 tu demande un index sur une liste l qui n'existe pas dans cette classe.
De plus, si ta classe tel ne sert que pour lire ton fichier, tu ferais mieux de la supprimer et de lire le fichier dans le constructeur de ton autre classe. Ce qui résoudrait en plus ton problème avec l, car tu pourrais faire de l un attribut de ta classe.
Ou alors, si tu veux vraiment garder ta classe tel, tu peux mettre ta lecture de fichier dans une méthode statique qui te renvoie ta liste. Et tu appelle cette méthode depuis ton autre classe.


Message édité par _mumu_ le 03-04-2008 à 01:08:27

---------------
"Software is like sex. It's better when it's free..."   Linus Torvalds
n°1711857
tsic
Posté le 03-04-2008 à 03:25:51  profilanswer
 

Je suis totalement convaicue par vos idées merci
Mais lorsque j'ai essayé de les appliquer voilà ce que c'est passé:
1)une erreur pour ce code disant que variable globale l est inexistante ou manquante:
 

Code :
  1. from socket import *
  2. import socket, sys, threading
  3. import SocketServer
  4. import time
  5. import locale
  6. class GestionnaireEcho(SocketServer.BaseRequestHandler):
  7.     def _init_(self):
  8.    
  9.         l = []
  10.         for ligne in open('benj.txt'):
  11.             for commande in ligne.split('#'):
  12.                 l.append(commande.strip())
  13.         print l 
  14.         return l
  15.     def handle(self):
  16.         print "la liste est:"
  17.         print l
  18.         locale.setlocale(locale.LC_ALL,'')
  19.         c= time.strftime('%A %c')
  20.         print "Connexion de ", self.client_address,c
  21.         while True:
  22.             donneesRecues = self.request.recv(8192)
  23.             t=time.strftime("%H:%M:%S" )
  24.             print "\n C ",t, "> ", donneesRecues
  25.             dr=str(donneesRecues)
  26.             try:
  27.                 ind=l.index(dr)
  28.                 print ind
  29.                 msg= str(l[ind+1])
  30.             except:
  31.                 msg="commande erronee"
  32.            
  33.             self.request.send(msg)
  34.            
  35.         print "Deconnexion de ", self.client_address
  36. mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  37. try:
  38.     serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho)
  39. except socket.error:
  40.     print "La liaison du socket a l'adresse choisie a echoue."
  41.     sys.exit()
  42. print "En attente..!!!!"
  43.  
  44. serveur.serve_forever()


 
2)en executant ce code print l de la 2eme classe m'envoie ceci :
-->   <__main__.tel instance at 0x00C3AFA8>
 

Code :
  1. from socket import *
  2. import socket, sys, threading
  3. import SocketServer
  4. import time
  5. import locale
  6. class tel():
  7.     def _call_(self):
  8.         l = []
  9.         for ligne in open('benj.txt'):
  10.             for commande in ligne.split('#'):
  11.                 l.append(commande.strip())
  12.         print l 
  13.         return l
  14. class GestionnaireEcho(SocketServer.BaseRequestHandler):
  15.     def handle(self):
  16.         l=tel()
  17.         print "la liste est:"
  18.         print l
  19.         locale.setlocale(locale.LC_ALL,'')
  20.         c= time.strftime('%A %c')
  21.         print "Connexion de ", self.client_address,c
  22.         while True:
  23.             donneesRecues = self.request.recv(8192)
  24.             t=time.strftime("%H:%M:%S" )
  25.             print "\n C ",t, "> ", donneesRecues
  26.             dr=str(donneesRecues)
  27.             try:
  28.                 ind=l.index(dr)
  29.                 print ind
  30.                 msg= str(l[ind+1])
  31.             except:
  32.                 msg="commande erronee"
  33.            
  34.             self.request.send(msg)
  35.            
  36.         print "Deconnexion de ", self.client_address
  37. mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  38. try:
  39.     serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho)
  40. except socket.error:
  41.     print "La liaison du socket a l'adresse choisie a echoue."
  42.     sys.exit()
  43. print "En attente..!!!!"
  44.  
  45. serveur.serve_forever()


Où est l'erreur?? j'ai pas compris.
MERCI

n°1711960
_mumu_
Posté le 03-04-2008 à 11:06:01  profilanswer
 

Pour le 1°, il faut que l soit un attribut de ta classe. Donc tu remplace les lignes 11 à 17 par

Code :
  1. self.l = [ j for i in file("benj.txt", "r" ) for j in i.replace('\n', '').split('#') ]


 
Pour le 2°), pourquoi utilises tu call ?  
Pour les méthodes statiques, va voir cette page : http://www.rexx.com/~dkuhlman/pyth [...] 0000000000


---------------
"Software is like sex. It's better when it's free..."   Linus Torvalds
n°1711962
multani
Dépressionnisé
Posté le 03-04-2008 à 11:11:02  profilanswer
 

1) Ya deux "_" à __init__ et __call__
2) Fais une fonction à la place de ta classe "tel" (super nom [:icon14]), ou alors apprends à te servir d'une classe
3) Pour ton problème 1, comment fonctionnent les attributs d'une classe
4) T'as des variables qui servent à rien, t'as pas besoin de tout ce qui ya dans le module socket non plus [:fitterashes]  
5) Tu risque d'avoir quelques problèmes avec ton while True [:petrus75]
6) Ça sert à rien de caster des string à tout va, tu sais quand même ce que tu traites non ? [:petrus dei] (hein [:petrus75])
 
Et essaie de faire un effort sur la présentation de ton code, tu t'aideras toi même [:petrus75]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  récupérer les donnees d'un fichier ds 1 tableau python

 

Sujets relatifs
Type de données SQL non attendu !?passage de l'intérieur d'un tableau par référence dans une fonction ?
Transférer un fichier dans 170 dossiers !Vecteur dans fichier
Accéder aux données d'un autre domaine en JavascriptExtraire les bonnes données
Creer un systeme de base de donnees poru jeux flashFiltrage de type de fichier dans la fenetre d'upload
cacher le nom de fichier sur une page HTMLRecuperer lien en flash
Plus de sujets relatifs à : récupérer les donnees d'un fichier ds 1 tableau python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR