Vous êtes sur la page 1sur 119
FAQ Python Date de publication : 24/05/2005 Dernière mise à jour : 23/05/2009 Cette FAQ

FAQ Python

Date de publication : 24/05/2005

Dernière mise à jour : 23/05/2009

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois

il se peut que les réponses apportées contiennent des erreurs, imprécisions

pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques. L'équipe Python de Developpez.

Vous

FAQ Python

FAQ Python

1. Introduction (5)

5

2. IDLE (3)

7

3. Généralités (13)

8

4. Mode console (4)

16

5. Type de données (31)

18

5.1. Les nombres (4)

19

5.2. Les chaînes de caractères (17)

22

5.2.1. String (10)

23

5.2.2. Les chaînes Unicode (5)

27

5.2.3. Expressions régulières (2)

29

5.3. Listes (6)

30

5.4. Dictionnaire (4)

33

6. Les fonctions (2)

35

7. Programmation objet (5)

37

8. Gestion Fichier/Répertoire (21)

40

8.1. Prérequis (1)

41

8.2. Fichier (7)

42

8.3. Répertoire (5)

46

8.4. Fichiers de configuration (6)

48

8.4.1. Fichiers variable=valeur (2)

49

8.4.2. ConfigParser (4)

50

8.5.

Compression/Archive (2)

52

9. Base de registre sous Windows (4)

54

10. Thread (3)

56

11. Réseau / Web (9)

59

11.1.

FTP (5)

61

12. Les erreurs (5)

64

13. GUI (64)

67

13.1.

Tkinter / Tix / Pmw (55)

68

13.1.1. Prérequis (4)

69

13.1.2. Tkinter (45)

71

13.1.2.1. Widget

(4)

72

13.1.2.2. Fenêtre

(7)

74

13.1.2.3. Entry (5)

77

13.1.2.4. Button (2)

79

13.1.2.5. Label (1)

81

13.1.2.6. Listbox (3)

82

13.1.2.7. (3)

Canvas

84

13.1.2.8. Text (4)

86

13.1.2.9. Menu (3)

88

13.1.2.10. tkMessageBox (3)

90

13.1.2.11. tkFileDialog (2)

91

13.1.2.12. Gestion de la géométrie (1)

92

13.1.2.13. Evènements (5)

93

13.1.2.13.1. Evènements Clavier (1)

94

13.1.2.13.2. Evènements Souris (2)

95

13.1.2.14.

Divers (2)

96

13.1.3.

Tix (6)

97

13.1.3.1. Widget (1)

98

13.1.3.2. Tix.Combobox (2)

99

13.1.3.3. Tix.Notebook (1)

101

13.1.3.4. Tix.Meter (1)

102

13.1.3.5. Tix.Balloon (1)

103

13.2.

wxPython (6)

104

FAQ Python

FAQ Python

13.3.

pyGTK (2)

107

14. Optimisation

(2)

109

15. Déploiement

(7)

111

15.1.

Py2exe

(6)

112

16. Autres bibliothèques (10)

116

16.1. Pil - Python Image Library (7)

117

16.2. Matplotlib (3)

 

119

FAQ Python

FAQ Python

Sommaire > Introduction

Qu'est-ce que Python ?

Auteurs : Guigui_ ,

Une présentation du langage Python est faite dans la première partie du cours de Swinnen qui vous montrera les

caractéristiques du langage:

# Python est portable sur de nombreux OS (Unix, Mac, Windows,

# Python est gratuit et utilisable sans restriction dans des projets commerciaux.

# La syntaxe de Python est très simple, l'indentation du code (plutôt que l'usage d'accolades) permet d'avoir des programmes très lisibles et plus compactes

# Python détruit lui-même les objets créés lorsque plus aucune référence ne pointe sur eux

# Il n'y a pas de pointeurs explicites en Python.

# Python est orienté-objet. Il supporte l'héritage multiple et la surcharge des opérateurs.

# Python est dynamiquement typé.

# Python est extensible : On peut l'interfacer avec d'autres langages (C, C++, Delphi, Java,

# La bibliothèque standard de Python est très riches et de nombreuses bibliothèques gratuites peuvent être facilement ajoutées

gratuites peuvent être facilement ajoutées Apprendre à programmer avec Python . En voici un résumé

Apprendre à programmer avec Python. En voici un résumé

)

)

Où trouver de l'aide pour Python ?

Auteurs : Guigui_ ,

La documentation en anglais est très importante, en français un peu moins.

Quelle implémentation de Python choisir ?

Auteurs : Guigui_ ,

Il existe plusieurs implémentations du langage Python:

• CPython, codée en C, la plus utilisée et appelée plus simplement Python

• Jython codée en Java et fonctionnant sur les machines virtuelles Java

• IronPython codée en C# et fonctionnant sur les plateformes .Net

Vous pouvez les télécharger à partir de notre rubrique

Vous pouvez les télécharger à partir de notre rubrique Outils Python et avoir plus de détails

Outils Python et avoir plus de détails sur leur fonctionnement.

FAQ Python

FAQ Python

Si vous débutez en Python, téléchargez de préférence CPython. Toute la documentation du site ainsi que le forum sont consacrés presque exclusivement à cette implémentation.

Quel éditeur utiliser ?

Auteurs : Guigui_ ,

Il est important d'utiliser un éditeur qui gère Python car le formatage du code est primordiale sous peine d'avoir des erreurs de syntaxe (notamment au niveau de l'indentation) Si vous faites uniquement de la programmation en mode console, l'éditeur IDLE proposé à l'installation de Python est un bon choix avec en particulier l'indentation automatique et la coloration syntaxique. Si vous aimez aussi l'auto-complétion, vous pouvez optez pour d'autres IDE que vous pouvez télécharger dans la

rubrique Outils Python Si vous programmez des interfaces graphiques, vous pouvez également être aidés par

rubrique Outils Python Si vous programmez des interfaces graphiques, vous pouvez également être aidés par des éditeurs spécialement conçus pour cela tels que Boa Constructor téléchargeables depuis la même rubrique. En revanche, si vous voulez rester complètement maître de votre code, il est peut-être préférable de tout programmer, ce qui n'est pas si difficile que cela avec l'habitude. Vous trouverez quelques tutoriels pour programmer intégralement vos IHMs dans la rubrique Tutoriels Python

A quelle version de Python se rapporte cette FAQ ?

Auteurs : Guigui_ ,

La FAQ Python se rapporte à la dernière release de Python. Actuellement, nous assurons que les codes source proposés dans cette FAQ sont compatibles avec la version 2.6 de Python (ainsi que dans les versions ultérieures de la branche 2.x) mais dans la majorité des cas, ils fonctionneront également sans problème avec des versions antérieures. Lors de nouvelles releases de Python, les pages seront mise à jour pour être conforme à cette release. Lorsque nécessaire, la version utile de Python sera mentionnée.

FAQ Python

FAQ Python

Sommaire > IDLE

 
 

Comment éditer un script python avec IDLE ?

Auteurs : Guigui_ ,

 

Pour ouvrir IDLE, distribué dans la distribution standart de Python, il suffit d'exécuter le fichier <PYTHONHOME>/ lib/idlelib/idle.pyw (typiquement sous Windows c:/python25/lib/idlelib/idle.pyw ). Une fois IDLE ouvert, il vous faut vous mettre en mode éditeur si cela n'est pas fait par défaut (menu File -> New Window ). Vous n'avez alors plus qu'à charger

votre fichier (menu File -> Open

).

Une autre solution est d'éditer directement votre script par un clic droit sur votre fichier puis Edit with IDLE.

lien :

Comment configurer IDLE en mode Editeur ou Shell au démarrage ?

Comment configurer IDLE en mode Editeur ou Shell au démarrage ?

Auteurs : Guigui_ ,

Dans le menu Options, cliquez sur l'option Configure IDLE

sélectionner l'option Open Edit Window si vous voulez ouvrir IDLE uniquement en mode éditeur ou bien Open Shell Window si vous voulez ouvrir IDLE en mode interactif. A la prochaine ouverture de IDLE, l'option sera prise en compte.

Cliquez ensuite sur l'onglet General. Vous pouvez alors

Pourquoi j'obtiens le message d'erreur IndentationError:

unindent does not match any outer indentation level ?

Auteurs : Guigui_ ,

L'erreur IndentationError intervient lorsqu'il y a un problème d'indentation dans votre code. Dans IDLE, la première ligne contient les caractères du prompt (>>>). Mais au niveau de l'alignement des blocks, il faut faire abstraction de ce prompt.

>>> nb = input("Choisissez un nombre :") Choisissez un nombre :5 >>> if nb > 0:

print "positif" else: print "négatif"

File "<pyshell#18>", line 3 else: print "négatif"

^

IndentationError: unindent does not match any outer indentation level >>> if nb > 0:

print "positif" else: print "négatif"

positif >>> if nb > 0:

print "positif" else: print "négatif"

positif

FAQ Python

FAQ Python

Sommaire > Généralités

 

Comment exécuter un programme Python ?

Auteurs : Guigui_ ,

Les fichiers Python que vous pouvez utiliser portent les extensions .py, .pyc ou .pyo. Sous Windows:

Les scripts Python sont exécutés par l'application python.exe ou pythonw.exe (si on ne veut pas que la console soit

affichée), fichiers que l'on retrouve dans le répertoire d'installation de Python (typiquement c:/python25). En général,

l'installation de Python, cette association est faite d'elle-même et un double-clic sur votre script Python suffit pour l'exécuter. Vous pouvez également l'exécuter à partir de la console DOS en tapant directement c:/python25/python.exe

à

monscript.py ou bien simplement python monscript.py si le répertoire c:/python25/ a été ajouté auparavant à la variable d'environnement PATH de windows (Panneau de Configuration->Système->Avancé->Variables d'environnement). Sous linux:

en début de script, il vous suffit d'insérer en première ligne #!/usr/bin/env python. Cette ligne permet au système Unix de trouver quel logiciel doit être utilisé pour interpréter la suite du fichier. Donnez ensuite l'attribut exécutable au fichier (soit en ligne de commande avec chmod+x monscript.py soit à partir d'un gestionnaire de fichier) et exécutez le fichier

à

partir la ligne de commande python monscript.py

Certains éditeurs permettent également d'exécuter ses scripts. Par exemple sous IDLE, un simple F5 exécute votre source.

lien :

lien :

 

Comment obtenir des informations utiles sur l'utilisation d'un objet/module/fonction ?

Auteurs : Guigui_ ,

 

Avant même de rechercher dans une quelconque documentation (cours, tutoriel, FAQ,

),

vous pouvez obtenir

facilement des informations sur tout objet, module ou fonction que vous souhaitez utiliser. Pour cela, il suffit à partir d'un interpréteur python, d'utiliser les fonctions dir([object]), help([object]) ou encore les docstrings avec l'attribut

 

doc

dir([object]) retourne la liste des attributs de l'objet object. Ces attributs peuvent être par exemple le nom des classes ou

fonctions d'un module, le nom des attributs ou fonctions d'une classe,

La liste obtenue n'est cependant pas forcément

complète. help([object]) invoque le système d'aide intégré. Si aucun argument n'est donné, le système d'aide interactif démarre sur la console de l'interpréteur. Si l'argument est une chaîne de caractères, celle-ci est considérée comme le nom d'un

module, fonction, classe, méthode, mot clé et la page d'aide détectée est donnée sur la console. Si l'argument est un autre type d'objet, la page d'aide de cet objet est alors générée.

Enfin vous pouvez aussi visualiser les docstrings en appelant le paramètre

doc

sur un objet.

 
 

Quelques exemples

 

## code pour obtenir des informations sur les string:

 

dir(str)

 

help(str)

str

doc

## code pour obtenir des informations sur le module math:

 

import math dir(math) help(math) ## ou help("math")

math

doc

## code pour obtenir des informations sur la fonction math.cos:

 

import math

 

dir(math.cos)

FAQ Python

FAQ Python

Quelques exemples

help(math.cos) ## ou help("math.cos")

math.cos

doc

 

Comment obtenir des informations sur son système (d'exploitation, plateforme, python) ?

Auteurs : Guigui_ ,

 

Python propose 2 modules principaux pour obtenir un maximum d'informations sur le système sur lequel est installé Python et sur Python lui-même, ce qui peut-être utile nécessaire si on développe une application multi-plateforme ou

devant être compatible avec différentes versions de Python. Ces 2 modules sont de parcourir les différents liens pour découvrir toutes les fonctions disponibles. Par exemple, pour connaître le système d'exploitation, vous pouvez faire:

Par exemple, pour connaître le système d'exploitation, vous pouvez faire: sys et platform . Il vous

sys et

Par exemple, pour connaître le système d'exploitation, vous pouvez faire: sys et platform . Il vous

platform. Il vous suffira

 

>>> import platform >>> platform.platform()

'Windows-XP-5.1.2600-SP2'

>>> platform.system() 'Windows' >>> platform.uname() ('Windows', 'ordiguigui', 'XP', '5.1.2600', '', '')

Pour connaître la plateforme sur lequel tourne Python:

 
 

>>> import sys >>> sys.platform

'win32'

Pour connaître la version de Python:

 
 

>>> import sys >>> import platform >>> sys.version_info (2, 5, 1, 'final', 0) >>> sys.version '2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]' >>> platform.python_version()

 

'2.5.1'

>>> platform.python_version_tuple() ['2', '5', '1']

Comment procéder à une installation silencieuse de Python sous windows ?

Auteurs : Guigui_ ,

La version 2.4 de Python est distribué sur Windows avec l'installateur de Microsoft (MSI). Vous pouvez ainsi en lui appliquant les paramètres adéquats opter pour une installation silencieuse. La commande à utiliser est:

msiexec /i python<version>.msi /q

python<version>.msi correspond au fichier à installer , msiexec est le l'installateur de microsoft (fichier msiexec.exe qui doit se trouver dans <Windows>\System32\ si non reconnu)

FAQ Python

FAQ Python

et q est un paramètre qui peut prendre les valeurs suivantes:

 

• qn: Pas d'interface

• qb: Affichage d'une simple barre de progression

• qb!: Comme qb mais sans le bouton Annuler

• qr: Affiche les boîtes de dialogue mais sans interaction avec l'utilisateur

• qn+: Comme qn avec affichage à la fin de la boîte de dialogue de fin d'installation

• qb+: Comme qb avec affichage à la fin de la boîte de dialogue de fin d'installation

On peut également rajouter un paramètre TARGETDIR si on veut changer le répertoire de destination

 
 

msiexec /i python<version>.msi TARGETDIR=d:\Python24

Pour une installation pour tous les utilisateurs, il est nécessaire de spécifier un autre paramètres ALLUSERS=1. En résumé, pour faire une installation sans interaction de l'utilisateur mais avec affichage complet du processus d'installation, il suffit d'utiliser la commander suivante

 

msiexec /i python-2.4.2.msi ALLUSERS=1 /qr

D'autres paramètres peuvent être utiliser. Pour plus d'information, vous pouvez consulter la officielle

paramètres peuvent être utiliser. Pour plus d'information, vous pouvez consulter la officielle documentation

Comment importer des modules/fonctions/fichiers ?

Auteurs : Guigui_ ,

Lors de l'importation d'un module, le programme va tout d'abord vérifier si le module à importer se trouve dans le dictionnaire sys.modules (module de bases + les modules d'autres bibliothèques que vous avez installés). Si le module n'est pas trouvé, le programme le cherchera à partir de la liste définie par sys.path (qui contient le répertoire courant, la variable d'environnement PYTHONPATH entre autres) Voici les syntaxes que vous pouvez utiliser:

import MonModule import MonModule as MonAlias from MonModule import * from MonModule import MonObjet1 as MonAlias1, MonObjet2 as MonAlias2

import Tkinter root=Tkinter.Tk() import Tkinter as Tk root=Tk.Tk() from Tkinter import * root=Tk()

On utilise régulièrement un alias lorsque le nom du module est long (genre Tk pour Tkinter). Pour les modules courts (os, re), on se contente d'un import simple. On déconseille l'utilisation de l'instruction from même si le programme est plus concis. Le code sera moins lisible car on ne saura pas à priori d'où viennent les fonctions utilisées. De plus, cela pourra entraîner des conflits de noms.

f=open('test.txt', 'w') ## la fonction open est celle des objets prédéfinies de Python

FAQ Python

FAQ Python

from os import * f=open('test.txt', O_CREAT) ## la fonction open est celle du module os, la définition de la fonction open du ## écrasée par celle de l'os lors lors de son import

du module os, la définition de la fonction open du ## écrasée par celle de l'os
du module os, la définition de la fonction open du ## écrasée par celle de l'os

builtin

du module os, la définition de la fonction open du ## écrasée par celle de l'os

a été

Quid des importations circulaires ?

Auteurs : Guigui_ ,

L'importation circulaire typique est quand 2 modules s'importent mutuellement. Leur utilisation est en général déconseillée et peut parfois introduire des erreurs à cause de variables non définies au moment des importations. Evitez donc au maximum l'importation circulaire. Il y a en général presque toujours moyen de le programmer autrement. Si pour vous, l'importation circulaire est inévitable, il vous faut simplement comprendre le fonctionnement de l'exécution d'un programme afin de placer les instructions dans le bon ordre. Nous allons partir sur un exemple simple. Nous avons 2 modules a.py et b.py qui effectueront respectivement un import b et un import a et nous exécutons le script main.py qui lui même importe le module a. Lorsque main.py tombe sur l'instruction import a, un objet sys.modules['a'] est alors créé et initialisé à vide. Le corps du module a est alors exécuté jusqu'à ce qu'il tombe sur l'instruction import b. Un nouvel objet sys.modules['b'] est alors créé et initialisé à vide; le corps du module b est alors exécuté. Lorsqu'il tombe sur l'instruction import a, comme l'objet sys.modules['a'] existe déjà, une variable globale a est alors liée dans le module b à cet objet; l'exécution du corps du module b se poursuit alors jusqu'à la fin. Cependant, le module a n'ayant pas été entièrement chargée, le corps du module b n'aura donc accès qu'aux objets déjà chargés dans le module a et des erreurs seront générés pour tout accès à d'autres objets du module a. C'est pourquoi, dans ce cas précis, il est important de bien maîtriser l'ordre des déclarations des objets dans chacun de vos modules. Une fois que les 2 modules a et b auront été entièrement importés, il n'y aura bien entendu plus aucune erreur de ce type.

 

Comment importer un module qui n'est pas dans le répertoire courant ?

 

Auteurs : Guigui_ ,

 

Si vous voulez structurer vos projets en ayant des fichiers dans différents répertoires, vous aurez parfois des problèmes au moment de l'importation des modules parce que Python ne saura pas où chercher vos modules. Il vous est néanmoins proposé plusieurs solutions pour que l'importation se fasse sans erreur. Python cherche en premier lieu le module à importer dans le répertoire courant. Il ira ensuite dans chercher dans les chemins définis par la variable d'environnement PYTHONPATH. Cette variable d'environnement permet d'initialiser la liste sys.path à partir de laquelle Python effectuera les importations. Vous pouvez modifier dynamiquement cette liste de chemins (liste qui ne sera donc valable qu'à l'exécution de votre programme) en ajoutant les répertoires supplémentaires dans lesquels vous voulez que Python cherchent les modules à importer.

 

import sys sys.path.append(monchemin)

 

Depuis Python 2.5, il est également possible d'effectuer des importations relatives. Pour cela, il vous faut d'abord créer

un fichier

init

py

dans le répertoire contenant les modules à importer. Ce fichier peut être vide. Par exemple,

considérons un répertoire locale qui contient un répertoire A lui même contenant un fichier

init

py

vide et un fichier

testA.py. Depuis votre répertoire locale, vous pouvez importer testA par l'instruction import A.testA, from A import testA ou from A.testA import *.

lien :

What's New in Python: 4 PEP 328: Absolute and Relative Imports
 
FAQ Python

FAQ Python

 

Comment déclarer une variable à partir d'une chaine de caractères ?

 

Auteurs : Guigui_ ,

 

Il arrive parfois qu'il nous faille déclarer des attributs à partir de la chaînes de caractères représentant leur nom, par exemple lors de la lecture d'un fichier de configuration contenant le nom des variables et leur valeurs. Le nom de toutes les variables (fonctions, classes ou simples attributs) sont conservés en Python dans des dictionnaires. Il suffit d'ajouter un élément à ces dictionnaires pour créer une nouvelle variable. Dans le cas d'un attribut: Pour récupérer l'ensemble des noms de variables globales, il suffit d'appler la méthode globals()

 

>>> globals()['mavariable']=5 >>> mavariable

 

5

Dans le cas d'une classe, pour créer de nouveaux attributs, on peut utiliser l'appel au dictionnaire

dict

 

>>> class maclasse:

 
 

def

init (self):

self

dict

['variable1']=[1,2,3]

 

print self

dict

['variable1']

>>> a=maclasse() [1, 2, 3]

Une autre façon, est d'utiliser la méthode global setattr(obj, name, value) qui aura le même effet

 
 

>>> setattr(a, 'variable2', (5,6)) >>> a.variable2 (5, 6)

 

Une autre méthode est d'utiliser directement la fonction exec(unstr) qui exécute la chaîne de caractères passé en argument

 

>>> exec('mavariable=5') >>> mavariable

 

5

>>> exec("mavariable=['5','6']") >>> mavariable

 

['5', '6']

 

Dans le cas d'une fonction: il n'est pas possible d'utiliser directement l'ajout d'un élément en passant directement par le dictionnaire. Il faudra passer par la méthode exec

 

>>> exec("def plus(x,y): print x+y") >>> plus(3,5)

 
FAQ Python

FAQ Python

8

8
8
8

Comment empêcher les messages d'avertissement lors de l'utilisation de caractères non-ASCII ?

Auteurs : naxelas ,

Quand vous lancez votre script Python, si celui-ci contient des caractères non-ASCII, vous pouvez avoir le message d'avertissement suivant:

sys:1: DeprecationWarning: Non-ASCII character

declared; see http://www.python.org/peps/pep-0263.html for details

in file

on line

, but no encoding

Par défaut l'interpréteur s'attend à ne devoir traiter que des caractères ascii. L'encodage ascii ne contient que 256 caractères, n'incluant pas les caractères accentués et spéciaux du français. Pour que l'interpréteur reconnaisse les caractères non ascii, vous devez déclarer l'encodage que vous utilisez au début du fichier source. Pour le français, les encodages iso-8859-1, Latin-1, cp1252 ainsi que utf-8 fonctionneront. La déclaration se fait comme ceci:

# -*- coding: iso8859-1 -*-

Pour plus de détails:

ceci: # -*- coding: iso8859-1 -*- Pour plus de détails: http://www.python.org/peps/pep-0263.html Comment quitter son

Comment quitter son application ?

Auteurs : Guigui_ ,

import sys

sys.exit()

Comment récupérer les paramètres passés à un programme ?

Auteurs : Guigui_ ,

Vous pourrez récupérer les paramètres passés à votre programme par l'attribut sys.argv qui contient la liste des paramètres et où sys.argv[0] est le nom complet du programme appelé.

Comment lancer un programme externe ?

Auteurs : Guigui_ ,

Il existe de multiples façon pour exécuter un programme externe qui dépendront de plusieurs facteurs (si il y a ou non des paramètres, si vous voulez attendre la fin du programme externe ou non avant de poursuivre le programme

principal,

différentes méthodes exposées à la suite.

principal, différentes méthodes exposées à la suite. ). Vous trouverez dans la Python Library Reference toutes

).

Vous trouverez dans la

Python Library Reference toutes les informations pour exploiter au mieux les

FAQ Python

FAQ Python

Toutes ses fonctions sont obtenues à partir du module os ou subprocess. Tout d'abord, vous pouvez utilisez la fonction os.startfile( path[, operation]) qui exécute le fichier path avec l'application associée par défaut et rend immédiatement la main.

 

import os os.startfile('c:/windows/notepad.exe') os.startfile('MonImage.bmp')

 

Une deuxième méthode est la fonction os.system( command) qui exécute command, ne rend la main que lorsque l'application lancée prend fin. Vous pouvez lancer l'application externe avec des paramètres.

 

import os os.system("c:/windows/notepad.exe monfichier.log") os.system('MonImage.bmp')

 

Une troisième méthode est la fonction os.spawnl(

)

ou os.spawnv(

)

ainsi que leurs variantes qui permet d'exécuter un

programme dans un nouveau processus. Le premier paramètre attendu peut prendre comme valeur os.P_WAIT pour attendre la fermeture de l'application avant de poursuivre le programme principal ou os.P_NOWAIT pour rendre la main immédiatement.

 

import os os.spawnl(os.P_NOWAIT, "c:/windows/notepad.exe")

 

Une quatrième méthode est la fonction os.popen( command[, mode[, bufsize]]) qui exécute command dans un processus enfant et rend immédiatement la main en retournant un descripteur du fichier.

 

import os os.popen("c:/windows/notepad.exe monfichier.log")

 
Vous pouvez également regarder du côté du module subprocess ( Python Library Reference: Subprocess management

Vous pouvez également regarder du côté du module subprocess ( Python Library Reference: Subprocess management ) qui aura pour but de remplacer les 3 dernières méthodes.

lien :

 

lien :

lien :

Comment n'instancier qu'une seule fois un programme ?

Pour n'instancier qu'une fois un programme, une solution simple peut être de créer un fichier au moment de l'exécution du programme et de le supprimer à la fin de l'exécution. Il vous suffit alors de vérifier l'existence ou non de ce fichier pour poursuivre l'exécution du programme. Le problème de cette solution peut cependant être l'absence de droit d'écriture ou bien un plantage de l'application (ou bien une fermeture de l'application non prévu) qui empêcherait la suppression de ce fichier. Une deuxième solution consiste à créer un mini-serveur sur un port défini qui se contente de simplement exister. La deuxième exécution d'un même programme générera une erreur lors de la tentative de création de ce mini-serveur sur ce même port.

FAQ Python

FAQ Python

#!/usr/bin/python # -*- coding: iso-8859-1 -*-

 

from asyncore import dispatcher import sys, time, socket

class Server( dispatcher ):

def

init (self):

dispatcher

init

(self)

self.create_socket( socket.AF_INET, socket.SOCK_STREAM ) self.bind( ( '', 50000 ) )

self.listen(1)

 

try:

Server()

 

except:

print 'Déjà en service !' sys.exit()

 

print 'START'

time.sleep(10)

print 'STOP'

FAQ Python

FAQ Python

Sommaire > Mode console

Comment ne pas afficher la fenêtre DOS à l'exécution du programme ?

Auteurs : Guigui_ ,

Si vous ne voulez pas que la fenêtre DOS s'ouvre, vous devez appeler votre programme par l'interpréteur pythonw (situé dans le même répertoire que l'interpréteur python). En général, il suffit de changer l'extension de votre programme de .py en .pyw. Si la fenêtre DOS s'ouvre encore, il vous faut alors associer manuellement les fichiers .pyw à pythonw.

Comment empêcher la fermeture de la fenêtre DOS à l'exécution d'un programme ?

Auteurs : Guigui_ ,

# Si votre programme ne présente aucun bogue, vous pouvez utilisez en fin de programme la fonction raw_input(prompt='') qui attend l'entrée d'une chaine de caractères avant de poursuivre l'exécution du programme.

raw_input("Appuyer sur une touche pour quitter le programme")

.

# Si vous êtes sous Windows et que vous voulez exécuter un programme test.py, vous pouvez procéder de la manière suivante:

créer un fichier test.bat (qui n'est autre qu'un fichier texte renommée avec l'extension bat) dans lequel vous tapez:

c:/python24/python.exe test.py pause

ou si le programme python.exe est le programme par défaut pour l'exécution d'un fichier .py

test.py

pause

Comment effacer le contenu de la console Dos/Shell ?

Auteurs : Onarap ,

Sous Linux:

import os os.system('clear')

Sous Windows:

import os

FAQ Python

FAQ Python

os.system('cls')

os.system( 'cls' )
os.system( 'cls' )
os.system( 'cls' )

Comment afficher un texte sans aller à la ligne

Auteurs : Guigui_ ,

Pour afficher un texte dans la console Python sans qu'il y ait un retour à la ligne, vous pouvez, soit à la fin de l'instruction print ajouter une virgule (mais cela ajoutera néanmoins un espace avec le prochain élément écrit sur la console, soit utilisez l'instruction sys.stdout.write(unstr) qui écrit unstr à la position courante du curseur. Avec cette méthode, pour retourner à la ligne, il suffira d'écrire le caractère "\n"

import sys print "un texte sur la 1er ligne", print "un autre texte toujours sur la 1er ligne" sys.stdout.write("on est sur la 2ème ligne") print "on est toujours sur la 2ème ligne", sys.stdout.write("on est sur toujours sur la 2ème ligne\n") print "on est sur la 3ème ligne"

FAQ Python

FAQ Python

Sommaire > Type de données

FAQ Python

FAQ Python

Sommaire > Type de données > Les nombres

 

Comment convertir un nombre d'une base quelconque en base 10 ?

Auteurs : Guigui_ ,

 

Pour convertir un nombre X (écrit sous forme d'une chaîne de caractères) d'une base quelconque en base 10 (ou nombre entier), on utilise la fonction int(x [,base]) base représente la base sous laquelle est écrit le nombre.

   

>>> int('AA', 16)

## Conversion de AA de la base 16 à la base 10

170

>>> int('0xAA', 16)

## Conversion de OxAA de la base 16 à la base 10

170

>>> int('71', 8)

## Conversion de 71 de la base 8 à la base 10

57

>>> int('071', 8)

## Conversion de 071 de la base 8 à la base 10

57

>>> int('AA', 11)

## Conversion de 11 de la base 11 à la base 10

120

Si

base=0, la base est déterminée automatiquement en fonction de l'écriture du nombre sous forme de chaîne. Par

exemple, un nombre hexadécimale est écrit sous forme d'une chaîne commençant par 0x, un nombre octale sous forme d'une chaîne commençant par 0. Dans ces cas-là, on n'est pas obligé de spécifier la base de départ en lui donnant la valeur 0.

   

>>> int('0x15',0)

21

>>> int('071', 0)

57

Comment convertir un nombre entier dans une autre base ?

Auteurs : Guigui_ ,

Pour convertir un nombre entier (ou en base 10) en un nombre octal, on utilise la fonction oct(N)

>>> oct(21)

'025'

Pour convertir un nombre entier (ou en base 10) en un nombre hexadécimal, on utilise la fonction hex(N)

>>> hex(21)

'0x15'

partir de la version 2.6 de Python, pour convertir un nombre entier (ou en base 10) en un nombre binaire, on utilise

A

la fonction bin(N)

>>> bin(21)

'0b10101'

FAQ Python

FAQ Python

Pour convertir dans d'autres bases, vous devrez programmer vos propres fonctions

 

Comment convertir un nombre entier en binaire ?

Auteurs : oiffrig , Guigui_ ,

 

Il

n'existe pas de fonctions dans la distribution de Python pour convertir un nombre entier en binaire. Vous devez donc

écrire votre propre fonction. Voici une fonction qui construit une chaîne binaire à partir d'un nombre. Elle est basé sur l'algorithme d'Euclide.

   

def bin(n):

 

"""Convertit un nombre en binaire""" q = -1 res = '' while q != 0:

 

q

= n // 2

r

=

n % 2

res = `r` + res

n

= q

 

return res

 

>>> bin(109323)

'11010101100001011'

On peut accélérer le processus avec un code sur le même algorithme mais beaucoup plus concis (suppression de toutes les variables intermédiaires); ce qui peut être utile si on a besoin de convertir beaucoup de nombres

   

def bin_optimise(n):

 

"""Convertit un nombre en binaire""" if n == 0: return '0' res = '' while n != 0: n, res = n >> 1, `n & 1` + res return res

Un petit test pour vérifier le gain en temps

   

import time

 

n = 1000000

a = time.clock()

for i in range(n): bin(i)

b

= time.clock()

 

for i in range(n): bin_optimise(i)

c

= time.clock()

 

print b-a, ',', c-b

>>> 15.9132169033 , 12.7892307542

A

partir de la version 2.6 de Python, les nombres binaires font leur apparition et commence par 0b. Pour convertir un

nombre entier en binaire, il suffit alors de passer par la fonction bin

   

>>> print (0bbb)

 

7

>>> bin(7)

 
FAQ Python

FAQ Python

'0b111'

'0b111'
'0b111'
'0b111'
 

Comment obtenir le code Ascii ou Unicode d'un caractère ?

Auteurs : Guigui_ ,

Pour obtenir le code ascii d'une caractère, il suffit d'appliquer la méthode ord(c) c est le caractère en question. ord renvoie un nombre entre 0 et 65535. S'il s'agit d'un caractère ascii, le code sera compris entre 0 et 255.

 

>>> ord("é")

233

>>> ord("a")

97

>>> ord(" ")

32

>>> ord(u'\u9000')

36864

Si vous voulez l'ensemble des codes ascii d'une chaîne de caractères, il suffit d'utiliser la fonction map( ord, machaîne) ou bien d'utiliser une liste en intention.

 

>>> map(ord, "abcde") [97, 98, 99, 100, 101] >>> [ord(i) for i in "abcde"] [97, 98, 99, 100, 101]

la méthode inverse est unichr(i) pour obtenir le caractère unicode de i ou chr(i) pour obtenir le caractère ascii de i. Dans ce dernier ça, i doit être compris entre 0 et 255, une erreur est retournée sinon.

 

>>> unichr(63000)

u'\uf618'

>>> unichr(97)

u'a'

>>> chr(97)

'a'

FAQ Python

FAQ Python

Sommaire > Type de données > Les chaînes de caractères

FAQ Python

FAQ Python

Sommaire > Type de données > Les chaînes de caractères > String

Où trouver de l'aide ?

Auteurs : Guigui_ ,

un grand nombre de fonctions sur les strings accessibles directement sur les chaines de caractères sans importation

de nouveau module:

optionels) aux différentes fonctions présentées par la suite.

aux différentes fonctions présentées par la suite. string . Ainsi, vous pourrez trouver une explication

string. Ainsi, vous pourrez trouver une explication complète (avec l'utilisation des paramètres

Comment extraire une sous-chaîne d'un string ?

Auteurs : Guigui_ ,

Comme pour tous les objets de type séquence, vous pouvez extraire une sous-séquence par la forme x[start:end:step] start est l'index de départ, end l'index de fin non inclu et step le pas. start et end peuvent être négatifs. Dans ce cas-là, l'index est considéré comme relatif à la fin du string et len(x)+start ou len(x)+end leur sont substitués. De plus si start est omis, il est considéré comme valant 0, si end est omis, il est considéré comme len(x). Si step est omis, il est traité comme valant 1. Ainsi, pour récupérer les permiers caractères (les plus à gauche) d'un string, il suffit d'utiliser la syntaxe x[:nb] nb représente le nombre de caractères à récupérer. Pour récupérer les derniers caractères (les plus à droite) d'un string, il suffit d'utiliser la syntaxe x[-nb:] nb représente le nombre de caractères à récupérer.

>>> x = "0123456789" >>> x[3:5]

'34'

>>> x[::2]

'02468'

>>> x[1::2]

'13579'

>>> x[:3]

'012'

>>> x[-3:]

'789'

Comment remplacer une chaine de caractères par une autre ?

Auteurs : Guigui_ ,

s.replace(old, new, maxsplit=sys.maxint) renvoit une copie de s où les occurences de la sous-chaine old est remplacée par la sous-chaine new

>>>'tapadaca'.replace('a','i',2)

'tipidaca'

FAQ Python

FAQ Python

FAQ Python Comment découper un string selon une chaine de caractères ? Auteurs : Guigui_ ,

Comment découper un string selon une chaine de caractères ?

Auteurs : Guigui_ ,

s.split(sep=None, maxsplit=sys.maxint) renvoit une liste L de strings où chaque élément de L est un mot de s, où la chaîne sep sépare les mots. Si sep=None, les mots sont séparés par une suite quelconque d'espaces

>>>'a = b'.split('=') ['a ',' b']

>>>'a

['a', 'b', 'c', 'd']

b c

d'.split()

Comment supprimer une chaine de caractères en tête/fin d'un string ?

Auteurs : Guigui_ ,

s.strip(x=None) renvoit une copie de s où la chaine x en début/fin de s est supprimé. si x=None, ce sont les espaces qui seront supprimés. lstrip et rstrip sont utilisées respectivement pour la suppresion à gauche et à droite

>>> 'aaaaabbbbbaaaaa'.strip('aaa') 'bbbbb'

>>> ' a ' a'

'.rstrip()

Comment compter le nombre d'occurences d'une sous-chaine dans un string ?

Auteurs : Guigui_ ,

s.count(sub, start=0, end=sys.maxint) renvoie le nombre d'occurences de la souschaine sub dans s[start:end]

>>> 'tapadaca'.count('a')

4

Comment renverser une chaîne de caractères ?

Auteurs : Guigui_ ,

On peut utiliser les tranches de séquences de syntaxe s[i:j:k] qui retourne la sous-séquence de s comprise entre le ième élément compris et le jème non compris de pas k s[::-1] renvoie les éléments de s dans l'ordre inverse.

>>> mystr='abcde'

>>> mystr[::-1]

FAQ Python

FAQ Python

'edcba'

'edcba'
'edcba'
'edcba'

Qu'est-ce qu'un raw string ?

Auteurs : Guigui_ ,

Un raw string est simplement une chaîne de caractères dont les séquences d'échappement avec le caractère \ (backslash ou antislash) ne sont pas interprétées. Cela est particulièrement utile avec les chaînes de caractères représentant les chemin d'accès à un fichier ou à un répertoire qui peuvent s'utiliser avec des / ou des \ et ainsi parfois entraîner des erreurs si vous oubliez de doubler les backslash. Les raw string sont aussi très utiles pour améliorer la lisibilité des expressions régulières friantes de backslash. Dans vos programmes, un raw string est simplement une chaîne de

caractères précédée de la lettre r. Vous pouvez voir les caractères spéciaux dans le nécessiteront une attention particulière.

dans le nécessiteront une attention particulière. Python Reference Manual qui >>> a =

>>> a = "c:\python25\tcl\reg1.1\tclreg11.dll" >>> a

'c:\\python25\tcl\reg1.1\tclreg11.dll'

>>> print a c:\python25 cl eg1.1 clreg11.dll >>> a = r"c:\python25\tcl\reg1.1\tclreg11.dll" >>> a

'c:\\python25\\tcl\\reg1.1\\tclreg11.dll'

>>> print a

c:\python25\tcl\reg1.1\tclreg11.dll

Pourquoi j'obtiens une erreur lorsque mon string contient le caractère \ (backslash) ?

Auteurs : Guigui_ ,

Le caractère \ (backslash) est en Python un caractère spécial qui peut donner un sens spécial au caractère le succédant.

peut donner un sens spécial au caractère le succédant. Par exemple, '\t' est le caractère de

Par exemple, '\t' est le caractère de tabulation. Vous trouverez la liste des caractères spéciaux dans le Python Reference Manual. Ainsi, lorsque vous travaillez avec des chaînes de caractères, si celle-ci contient un \, une erreur ou une mauvaise interprétation de la chaîne peut apparaître, notamment lorsque vous manipulez sous windows des path de fichiers ou répertoires. Si vous avez besoin du caractère \ dans une de vos chaînes, dédoublez-le (\\) ou bien utilisez les raw string qui ne considèrent pas le caractère \ comme spécial. Dans le cas de fichiers ou répertoires sous windows, on peut aussi utiliser le caractère / (slash) à la place qui est reconnu de la même façon.

>>> import os >>> os.path.isdir('c:\python24\bin') False >>> os.path.isdir('c:\\python24\\bin') True >>> os.path.isdir(r'c:\python24\bin') True >>> os.path.isdir('c:/python24/bin')

FAQ Python

FAQ Python

True

True

Comment gérer un compteur avec un nombre de chiffres constant ?

Auteurs : Guigui_ ,

Problèmatique: vous souhaitez gérer un compteur avec nombre de chiffres constants (donc en affichant des "0" à gauche des nombres ne possédant pas assez de chiffres). Pour cela, il vous suffit d'utiliser la fonction s.zfill( width) qui rajoute des caractères '0' devant la chaînes de caractères jusqu'à ce que celle-ci ait une longueur égale à width. Si la chaînes de caractère a une longueur inférieure à width, celle- ci est retournée telle quelle. Vous pouvez également utiliser la fonction s.rjust( width[, fillchar]) qui permet d'ajuster une chaîne de caractères en ajoutant à gauche le nombre de caractères fillchar nécessaires pour que la nouvelle chaîne de caractères est une longueur égale à width

for i in range(1000): print str(i).zfill(3) for i in range(1000): print str(i).rjust(3, '0')

La fonction s.ljust( width[, fillchar]) permet d'ajuster une chaîne de caractères en ajoutant à droite le nombre de caractères fillchar nécessaires pour que la nouvelle chaîne de caractères ait une longueur égale à width

FAQ Python

FAQ Python

Sommaire > Type de données > Les chaînes de caractères > Les chaînes Unicode

Quel est la différence entre une chaîne unicode et une chaîne normale ?

Auteurs : Guigui_ ,

Les chaînes normales décrites par le type str sont des chaînes d'octets qui peuvent être interprétées en connaissant leur encodage. Ils en existent de nombreux comme l'ascii (7 bits) qui est l'encodage par défaut de Python, ISO-8859-1 (ou latin_1 sur 8 bits) pour les langues occidentales, utf-8, utf-16, Les chaînes unicode décrites par le type unicode permette de définir tout caractère existant où chaque caractère nécessite plusieurs octets pour être codées (2 octets pour Python qui utilise unicode UCS2). Les chaînes unicode sont reconnaissables par la présence du caractère u devant la chaîne. Vous pouvez transformer une chaîne normale en chaîne unicode et vice versa.

Comment savoir si une chaîne de caractères est de type str ou unicode ?

Auteurs : Guigui_ ,

La méthode isinstance( object, classinfo) renvoie True si l'objet object est une instance de la classe classinfo ou d'une classe dérivée.

a = u'a\xe2' print isinstance(a, unicode) ## True

Comment convertir une chaîne normale en chaîne unicode ?

Auteurs : Guigui_ ,

Si vous avez une chaîne normale dont vous connaissez l'encodage, vous pouvez la transformer en chaîne unicode par la fonction unicode( [object[, encoding [, errors]]]) object est la chaîne à convertir et encoding, l'encodage d'interprétation de object. Vous pouvez également utiliser la méthode decode( [encoding[, errors]]) appliquée à un objet de type str

strutf8 = '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa' ## chaîne "âäàéèëê" encodée en utf-8

uni = unicode(strutf8, 'utf-8') ## uni = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

uni2 = strutf8.decode('utf-8')

## uni2 = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

Si vous utilisiez un autre encodage, vous pourriez obtenir une erreur (unicode(strutf8, 'ascii') génèrera une erreur) ou bien une chaîne unicode ne décrivant par la chaîne spécifiée (unicode(strutf8, 'latin_1') ). Si vous voulez convertir une chaîne de caractères non contenue dans une variable en chaîne unicode, vous pouvez directement le faire en rajoutant en ajoutant le caractère u devant la chaîne

FAQ Python

FAQ Python

uni = u"âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

uni = u "âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'
uni = u "âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'
uni = u "âäàéèëê" ## u'\xe2\xe4\xe0\xe9\xe8\xeb\xea'

Comment convertir une chaîne unicode en chaîne normale ?

Auteurs : Guigui_ ,

Si vous avez une chaîne unicode, vous pouvez facilement la convertir en chaîne normale sous n'importe quel encodage (capable d'interpréter la chaîne unicode) avec la méthode appliquée à une chaîne unicode encode( [encoding[,errors]]) encoding est l'encodage souhaité pour la chaîne normale créée.

a = u'\xe2\xe4\xe0\xe9\xe8\xeb\xea' a.encode('utf-8') ## '\xc3\xa2\xc3\xa4\xc3\xa0\xc3\xa9\xc3\xa8\xc3\xab\xc3\xaa'

Comment connaître l'encodage par défaut des chaînes de caractères ?

Auteurs : Guigui_ ,

Les problèmes viennent souvent du fait que l'on définit des chaînes contenant des caractères spéciaux sans que l'on écrive ses caractères spéciaux avec un encodage spécifique (par exemple 'ä' au lieu de '\x84' dans l'encodage cp850). Vous pouvez connaître l'encodage par défaut dans lequel Python encodera vos chaînes contenant des caractères spéciaux par l'attribut sys.stdin.encoding et ainsi facilement la convertir en chaîne unicode.

import sys print sys.stdin.encoding ## cp1252 sous IDLE, cp850 sous la console Python machaine = 'äâ' ## machaine est une chaîne encodée selon l'encodage sys.stdin.encoding unicode(machaine, sys.stdin.encoding) ## u'\xe4\xe2'

Ainsi la fenêtre interactive d'IDLE utilise l'encodage cp1252, la console interactive Python l'encodage cp850

FAQ Python

FAQ Python

Sommaire > Type de données > Les chaînes de caractères > Expressions régulières

Comment tester la validité de son expression régulière ?

Auteurs : Miksimus ,

Le logiciel Kodos permet de tester vos expressions régulières. Il est disponible sous Linux et

Le logiciel Kodos permet de tester vos expressions régulières. Il est disponible sous Linux et Windows. Son utilisation est très simple et les quelques exemples disponibles vous permettront de comprendre rapidement son fonctionnement.

Comment remplacer un motif d'une chaîne de caractères par un autre string ?

Auteurs : Guigui_ ,

Les chaînes de caractères possèdent une méthode replace qui permettent de remplacer une sous-chaîne par une autre. Mais il arrive souvent que l'on veuille plutôt traiter un motif plutôt qu'une sous-chaîne prédéfinie. Pour cela, il convient alors d'utiliser le module re et la fonction re.sub( pattern, repl, string[, count]) . pattern est le motif en question dont vous

pouvez retrouver la syntaxe dans la

rencontré, string est la chaîne à traiter. Enfin, count, qui est un paramètre facultatif, indique le nombre d'occurences du motif qui seront substitués (les count premiers). Si ce paramètre est omis ou égal à 0, toutes les occurences seront substituées.

ou égal à 0 , toutes les occurences seront substituées. Python Library Reference . repl est

Python Library Reference. repl est la sous-chaîne qui sera substituée au motif

>>> import re >>> a = "Phrase test avec des nombres comme 500 ou 2487" >>> re.sub("\d", "*", a) 'Phrase test avec des nombres comme *** ou ****' >>> re.sub("\d+", "*", a) 'Phrase test avec des nombres comme * ou *'

FAQ Python

FAQ Python

Sommaire > Type de données > Listes

 

Quelles sont les méthodes basiques de l'objet list ?

Auteurs : Guigui_ ,

Les listes sont des objets qui possèdent quelques méthodes très pratiques pour les manipuler:

l.append(x) : ajoute l'occurence x en fin de liste. l.extend(x) : ajoute chaque élement de la séquence x en fin de liste. l.count(x) : renvoie le nombre d'occurences x de la liste. l.index(x[, i[, j]]) : retourne le plus petit k tel que s[k] = x et i<=k<=j. retourne une erreur si l'élément n'est pas présent dans la liste. Si i et j sont omis, l'ensemble de la liste est considéré. l.insert(i, x) : insère l'occurence x à la position i. l.pop([i]) : retourne l'élément de la position i et le supprime de la liste. Si i est omis, le dernier élément de la liste est retourné et supprimé l.remove(x) : supprime la première occurence de x de la liste. retourne une erreur si cette valeur n'est pas présente. l.reverse() : renverse la liste sur place. l.sort([cmp[, key[, reverse]]]) : trie les éléments de la liste sur place. Vous pouvez définir votre propre fonction de comparaison en définissant le paramètre cmp. Le booléan reverse permet de retourner ou non la liste triée dans l'ordre croissant ou décroissant. Si ces paramètres sont omis, la liste est triée dans l'ordre alphanumérique croissant.

 

>>> a = [5, 0, 3, 9, 4, 3, 7] >>> a.append(15) ## a = [5, 0, 3, 9, 4, 3, 7, 15]

>>> a.extend((45, 12, 35)) ## a = [5, 0, 3, 9, 4, 3, 7, 15, 45, 12, 35] >>> a.extend('abcdef') ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e', 'f'] >>> a.count(3)

2

>>> a.index(3)

2

>>> a.insert(8, 6) ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e', 'f']

>>> a.pop() ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e'] 'f' >>> a.remove(3) ## a = [5, 0, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e'] >>> a.reverse() ## a = ['e', 'd', 'c', 'b', 'a', 35, 12, 6, 45, 7, 3, 4, 9, 0, 5] >>> a.sort() ## a = [0, 3, 4, 5, 6, 7, 9, 12, 35, 45, 'a', 'b', 'c', 'd', 'e']

Comment supprimer une occurence dans une liste ?

Auteurs : Guigui_ ,

Vous avez plusieurs manières de supprimer une occurence dans une liste La première façon est d'utiliser la méthode l.remove(x) qui supprime la première occurence x dans la liste l et qui retourne une erreur si l'occurence x n'existe pas dans l.

l = [1,5,4,1,23,1,2,1] try:

while True: l.remove(1) except: pass print l ## [5,4,23,2]

Si vous voulez supprimer toutes les occurences d'une valeur dans une liste, ne passer pas par la méthode remove qui est lente mais reconstruisez plutôt entièrement votre liste en omettant les éléments qui ne vous intéressent plus. Cela se fait très facilement avec une liste en intension.

Suppression de la valeur 0 dans une liste

en intension . Suppression de la valeur 0 dans une liste - 30 - Les sources
FAQ Python

FAQ Python

 

Suppression de la valeur 0 dans une liste

l

= 5 * range(4)

##

[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

l

= [x for x in l if x!=0]

print l

##

[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

Pour ne conserver qu'une seule occurence pour chaque élement de la liste, utilisez le type set qui représente les objets ensembles et qui conserve donc une unique occurence de chaque élément d'une séquence.

 

l

= [1,5,4,1,23,1,2,1]

 

s

= set(l)

l

= list(s)

print l ## [1,2,4,5,23]

 

Comment concaténer les éléments d'une liste dans une string ?

Auteurs : Guigui_ ,

Si votre liste ne contient que des string, il suffira d'utiliser la méthode ''.join(l) l représente une séquence. Si votre liste contient autre chose que des string, vous pouvez utilisez toujours cette méthode join tout en traitant chaque élément de la séquence exemple:

l1 = ['toto',' ','part',' ','en',' ','voyage'] strl1 = ''.join(l1) l2 = [116, 111, 116, 111, 32, 112, 97, 114, 116, 32, 101, 110, 32, 118, 111, 121, 97, 103, 101] str2 = ''.join(chr(i) for i in l2)

Comment mélanger les éléments d'une liste ?

Auteurs : Guigui_ , Choupi ,

Le module random propose la fonction random.shuffle( x[, random]) qui permet de mélanger une séquence en place.

>>> import random >>> l = range(100) >>> random.shuffle(l)

Niveau algorithmique, voici une méthode pour mélanger une liste d'une complexité linéaire (par rapport au nombre d'éléments de la liste). On va simplement parcourir tous les élements de la liste et à chaque fois en choisir un autre au hasard et faire l'échange des 2 éléments. Cette méthode sera de toute façon beaucoup plus longue que l'utilisation de la fonction précédente.

import random

l = range(1000)

count = len(l) randint = random.randint for i in range(count):

j = randint(0,count-1) ## Selection au hasard de l'index d'un element de la liste ## Echange des 2 elements

FAQ Python

FAQ Python

l[i], l[j] = l[j], l[i]

l[i], l[j] = l[j], l[i]
l[i], l[j] = l[j], l[i]
l[i], l[j] = l[j], l[i]

Comment vider une liste ?

Auteurs : Guigui_ ,

L'objet list ne possède pas de méthode pour vider complètement ses éléments. Si vous affecter la liste vide à votre liste ( mylist = [] ), vous créer en faite un nouvel objet, ce qui peut poser problème si d'autres références pointent sur ce même objet et que cette particularité est importante dans votre programme. La méthode la plus simple si vous souhaitez toujour travailler sur la même liste est d'utiliser directement la fonction comme suit:

del(mylist[:])

une autre méthode beaucoup moins rapide est d'utiliser la méthode pop dans une boucle while

while mylist: mylist.pop()

Comment créer une liste de listes de nombres (ou tableau à 2 dimensions) ?

Auteurs : Guigui_ ,

Supposons que nous voulions créer un tableau d'entiers de 5 cases par 5. La méthode intuitive serait la suivante:

>>> l = 5 * [5*[0]] >>> l[0][0] = 1 >>> print l [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]

Cependant en tenant de modifier un élément de la liste, on s'aperçoit que l'affectation s'est faite à plusieurs endroits. Ceci vient simplement du fait que lors de la création de notre liste de listes, la sous-liste 5*[0] n'a en fait été créée qu'une seule fois et que chaque sous-liste l[i] (0<=i<=4) pointe ainsi sur la même zone mémoire. Pour créer une liste de listes (contenant des éléments initialisés), il vous faudra donc passer par 2 étapes:

>>> l = 5*[0]

>>> for i in range(len(l)): l[i] = 5*[0]

## peu importe ce que l'on met dans cette liste

>>> l[0][0]=1 >>> print l [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Il est à noter que cette méthode ne fonctionne qu'avec des types ou objets immuables (nombres ou chaînes de caractères) mais pas avec des objets.

FAQ Python

FAQ Python

Sommaire > Type de données > Dictionnaire

Quelles sont les opérations de base sur l'objet dict ?

Auteurs : oiffrig ,

dic[cle]: Retourne la valeur associée à la clé cle dic.get(cle, val): Retourne la valeur associée à la clé cle, ou val si la clé n'existe pas dic[cle] = val: Assigne la valeur val à cle (si la clé n'existe pas, elle est créée) del dic[cle]: Supprime la clé cle dic.clear(): Vide le dictionnaire dic1.update(dic2): Assigne à dic1 les éléments de dic2

>>> dic = {'prenom': 'Jean', 'nom': 'Dupond'} >>> print dic['nom'] Dupond >>> print dic.get('mail', 'a@a.com') a@a.com >>> dic['tel'] = '0123456789' # dic = {'nom': 'Dupond', 'tel': '0123456789', 'prenom': 'Jean'} >>> dic2 = {'prenom': 'Jean-Pierre', 'mail': 'jp@dupond.com'} >>> dic.update(dic2) # dic = {'nom': 'Dupond', 'tel': '0123456789', 'prenom': 'Jean- Pierre', 'mail': 'jp@dupond.com'} >>> del dic['mail'] # dic = {'nom': 'Dupond', 'tel': '0123456789', 'prenom': 'Jean-Pierre'} >>> dic.clear() # dic = {}

Comment tester si une clé existe dans un dictionnaire ?

Auteurs : oiffrig ,

Un dictionnaire permet l'utilisation de la syntaxe x in dic

dic = {'prenom': 'Jean', 'nom': 'Dupond'} if 'tel' in dic:

print 'Téléphone:', dic['tel']

Comment obtenir la liste des éléments d'un dictionnaire ?

Auteurs : oiffrig ,

Il y a trois méthodes permettant de lister les éléments :

dic.keys() donne la liste des clés

dic.values() donne la liste des valeurs

dic.items() donne la liste des couples (clé, valeur)

Attention: Avec Python 3.0, ces méthodes ne renvoient plus des listes mais des vues, pour obtenir une liste, il faut utiliser list(dict.items()) par exemple On peut aussi itérer sur les clés :

for cle in dic:

print cle, ":", dic[cle]

FAQ Python

FAQ Python

FAQ Python Quels sont les types de clés que l'on peut utiliser ? Auteurs : oiffrig
FAQ Python Quels sont les types de clés que l'on peut utiliser ? Auteurs : oiffrig