Python>>> Jongler avec les données
sebsauvage
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
(N'ayant trouvé aucun forum Python vraiment bien, je viens faire découvrir Python ici, avec des exemples ; Je viendrai poster de nouveaux exemples de temps en temps).
En Python, en plus des types de données standards (entier, chaîne, etc.), il y a 3 type de données bigrement pratiques: les listes, tuples et dictionnaires.
Avec les tuples par exemple, il est facile de créer une fonction qui renvoie plusieurs valeurs:
>>> def mafonction( a ):
________return (a*2, a-3)
>>> ( b, c ) = mafonction(5)
>>> print b
10
>>> print c
2
Le type liste permet de manipuler les listes avec une désarmante facilité :
>>> import string
>>> texte = "rouge/vert/bleu"
>>> maliste = string.split(texte,"/")
>>> print maliste
['rouge', 'vert', 'bleu']
>>> print maliste[1]
vert
>>> maliste.append("rose")
>>> print maliste
['rouge', 'vert', 'bleu', 'rose']
>>> print len(maliste)
4
>>> print string.join(maliste," - ")
rouge - vert - bleu - rose
>>> maliste.sort()
>>> print maliste
['bleu', 'rose', 'rouge', 'vert']
On peut faire des listes de n'importe quoi, mélangeant chaînes, entier, etc..
Par exemple, voici une liste qui contient une chaîne, un entier, une autre liste et un tuple:
>>> liste2 = [ 'coucou' , 5 , [1,3,5], (12,24) ]
>>> print liste2
['coucou', 5, [1, 3, 5], (12, 24)]
>>> print liste2[2]
[1, 3, 5]
Ces 3 types (tuple, dictionnaire, liste) peuvent être utilisés partout, y compris dans les valeurs d'entrée et sortie des fonctions.
On peut donc très bien faire des fonctions qui prennent en paramètre (ou donnent en sortie) des dictionnaires de liste contenant des tuples qui contiennent des chaînes, entiers, d'autres listes, etc.
ça permet de manipuler facilement des structures de données complexes, sans avoir à faire appel à des pointeurs, des tableaux alloués dynamiquement, des boucles pour balayer ces tableaux, etc.
Je vous encourage à faire des essais vous-même en tapant directement dans l'interpréteur de commande Python.
:-)
En Python, en plus des types de données standards (entier, chaîne, etc.), il y a 3 type de données bigrement pratiques: les listes, tuples et dictionnaires.
Avec les tuples par exemple, il est facile de créer une fonction qui renvoie plusieurs valeurs:
>>> def mafonction( a ):
________return (a*2, a-3)
>>> ( b, c ) = mafonction(5)
>>> print b
10
>>> print c
2
Le type liste permet de manipuler les listes avec une désarmante facilité :
>>> import string
>>> texte = "rouge/vert/bleu"
>>> maliste = string.split(texte,"/")
>>> print maliste
['rouge', 'vert', 'bleu']
>>> print maliste[1]
vert
>>> maliste.append("rose")
>>> print maliste
['rouge', 'vert', 'bleu', 'rose']
>>> print len(maliste)
4
>>> print string.join(maliste," - ")
rouge - vert - bleu - rose
>>> maliste.sort()
>>> print maliste
['bleu', 'rose', 'rouge', 'vert']
On peut faire des listes de n'importe quoi, mélangeant chaînes, entier, etc..
Par exemple, voici une liste qui contient une chaîne, un entier, une autre liste et un tuple:
>>> liste2 = [ 'coucou' , 5 , [1,3,5], (12,24) ]
>>> print liste2
['coucou', 5, [1, 3, 5], (12, 24)]
>>> print liste2[2]
[1, 3, 5]
Ces 3 types (tuple, dictionnaire, liste) peuvent être utilisés partout, y compris dans les valeurs d'entrée et sortie des fonctions.
On peut donc très bien faire des fonctions qui prennent en paramètre (ou donnent en sortie) des dictionnaires de liste contenant des tuples qui contiennent des chaînes, entiers, d'autres listes, etc.
ça permet de manipuler facilement des structures de données complexes, sans avoir à faire appel à des pointeurs, des tableaux alloués dynamiquement, des boucles pour balayer ces tableaux, etc.
Je vous encourage à faire des essais vous-même en tapant directement dans l'interpréteur de commande Python.
:-)
A voir également:
- Python>>> Jongler avec les données
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Citizen code python avis - Accueil - Outils
- Trier des données excel - Guide
- Comment sauvegarder toutes les données de mon téléphone - Guide
6 réponses
Le code suivant marche bien:
Ce qui affiche:
Attention: self n'est à utiliser que quand on créé une classe.
#!/usr/bin/python # -*- coding: iso-8859-1 -*- class clients: def __init__(self): self.clients=[] def newth(self,N,P,A,T): self.clients.append({'nom':N,'prenom':P,'adresse':A,'tel':T}) c = clients(); c.newth("HERMAN","Pee-wee","5 allée des corbeau","12345678") c.newth("COLLINS","Phil","7 rue des charmes","77665544") print c.clients
Ce qui affiche:
[{'nom': 'HERMAN', 'tel': '12345678', 'adresse': '5 all\xe9e des corbeau', 'prenom': 'Pee-wee'}, {'nom': 'COLLINS', 'tel': '77665544', 'adresse': '7 rue des charmes', 'prenom': 'Phil'} ]
Attention: self n'est à utiliser que quand on créé une classe.
Bonjour,
Petite question sur les dictionnaires.
Je sauvegarde un dictionnaire dans un fichier, mais je n'arrive pas à le lire!
Voici un bout de code:
Si il y un dictionnaire d'enrégistrer, et que je veux le lire avec la méthode readFile() j'obtient ce message:
File "G:\B63\SiteWeb\cgi-bin\Vins\log2.py", line 35, in readFile
self.clients = pickle.loads(f)
File "C:\Python23\lib\pickle.py", line 1393, in loads
file = StringIO(str)
TypeError: expected read buffer, file found
Quelqu'un a une idée?
OctetPlus
Petite question sur les dictionnaires.
Je sauvegarde un dictionnaire dans un fichier, mais je n'arrive pas à le lire!
Voici un bout de code:
clients = {} def AjouteUser(self): self.clients[self.user] = self def readFile(self): try: f=open(FICHIER,"r") self.clients = pickle.loads(f) f.close() except IOError: f=open(FICHIER,"w") f.close() def saveToFile(self): f=open(FICHIER,"w") pickle.dump(self.clients, f) f.close()
Si il y un dictionnaire d'enrégistrer, et que je veux le lire avec la méthode readFile() j'obtient ce message:
File "G:\B63\SiteWeb\cgi-bin\Vins\log2.py", line 35, in readFile
self.clients = pickle.loads(f)
File "C:\Python23\lib\pickle.py", line 1393, in loads
file = StringIO(str)
TypeError: expected read buffer, file found
Quelqu'un a une idée?
OctetPlus
Hello, OctetPlus.
Ton code me paraît curieux: Tu utilises le mot 'self' alors que tu n'as défini aucune classe. (à moins que le code ci-dessus soit un extrait de ta classe ?)
Exemple de (dé)sérialisation d'un dictionnaire:
Ton code me paraît curieux: Tu utilises le mot 'self' alors que tu n'as défini aucune classe. (à moins que le code ci-dessus soit un extrait de ta classe ?)
Exemple de (dé)sérialisation d'un dictionnaire:
import pickle # On créé un dictionnaire mondict = { 'bleu':5, 'rouge':7, 'vert':3 } # Sauvegarder: fichier = open('mondictionnaire.dat','w+b') pickle.dump(mondict,fichier) fichier.close() # Charger: fichier2 = open('mondictionnaire.dat','rb') mondict2 = pickle.load(fichier2) fichier2.close() print mondict2
Les fonctions sont des méthodes d'un objet, d'où "self"
Merci vous m'avez aidé!
Juste une petite question!
La fonction "open" prend un paramètre le type d'ouverture d'accès au fichier. Toutefois, j'utilisait seulement:
w : pour créer et écrire dans un fichier
r: pour lire
a: pour ajouetr dans un fichier
Mais là:
w+b : ???
rb : ????
Il y a d'autres comme ça?
OctetPlus
Merci vous m'avez aidé!
Juste une petite question!
La fonction "open" prend un paramètre le type d'ouverture d'accès au fichier. Toutefois, j'utilisait seulement:
w : pour créer et écrire dans un fichier
r: pour lire
a: pour ajouetr dans un fichier
Mais là:
w+b : ???
rb : ????
Il y a d'autres comme ça?
OctetPlus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour sebsauvage,
Je traite une liste de dictionnaire. prenons l'exemple suivant:
hh=[{'id':9,'u':0},{'id':8,'u':6},{'id':5,'u':1}]
1)def modif(self,val,ide):
=>comment pourrais-je accéder au contenu de la liste pour chercher l'élément qui a comme 'id'=ide pour changer la valeur de son u=val(nouvelle valeur)
dans plusieurs exemples que j'ai vu le seul accès à la liste est par son index (càd hh[0])
merci pour votre aide.
Je traite une liste de dictionnaire. prenons l'exemple suivant:
hh=[{'id':9,'u':0},{'id':8,'u':6},{'id':5,'u':1}]
1)def modif(self,val,ide):
=>comment pourrais-je accéder au contenu de la liste pour chercher l'élément qui a comme 'id'=ide pour changer la valeur de son u=val(nouvelle valeur)
dans plusieurs exemples que j'ai vu le seul accès à la liste est par son index (càd hh[0])
merci pour votre aide.
S'il s'agit de stocker des couples (id,valeur), ta structure de données hh ne me semble pas vraiment optimale.
J'aurais fait:
Comme ça pour modifier une valeur, il aurait suffit de faire:
Avec ta structure, c'est moins pratique parcequ'il faut boucler sur tous les éléments:
J'aurais fait:
hh2 = { 9:0, 8:6, 5:1 }
Comme ça pour modifier une valeur, il aurait suffit de faire:
hh2[8]=3
Avec ta structure, c'est moins pratique parcequ'il faut boucler sur tous les éléments:
for d in hh: if d['id']==8: d['u'] = 3
Merci pour ta reponse mais ce n'est pas tout à fait ça.
Comme par exemple un client qui doit avoir un nom,un prénom, une adresse,un tel
Maintenant j'ai fait à chaque nouveau thread
//self.clients est une liste de dictionnaires qui représentent les coordonnées des différents clients.
def __init__(self):
self.clients=[]
def newth(N,P,A,T)
self.clients.append({'nom':N,'prenom':P,'adresse':A,'tel':T})
print self.client
La fct newth m'écrase tjs les données du précédent client et le remplace par les nouveaux données.
Pourquoi "append" ne fonctionne pas correctement.
Merci
Comme par exemple un client qui doit avoir un nom,un prénom, une adresse,un tel
Maintenant j'ai fait à chaque nouveau thread
//self.clients est une liste de dictionnaires qui représentent les coordonnées des différents clients.
def __init__(self):
self.clients=[]
def newth(N,P,A,T)
self.clients.append({'nom':N,'prenom':P,'adresse':A,'tel':T})
print self.client
La fct newth m'écrase tjs les données du précédent client et le remplace par les nouveaux données.
Pourquoi "append" ne fonctionne pas correctement.
Merci