In [2]:
from __future__ import print_function
Pour écrire ou lire dans un fichier, open() renvoie un objet de type fichier, et est utilisée plus généralement avec deux arguments : open(nomfichier, mode).
In [11]:
f=open('fichiertravail.txt', 'w')
Le premier argument est une chaîne de caractères contenant le nom du fichier. Le deuxième argument est une autre chaîne de caractères contenant quelques caractères décrivant la manière d’utiliser le fichier. mode vaut 'r' quand le fichier doit être seulement lu, 'w' pour seulement être écrit (un fichier déjà existant avec le même nom sera effacé), et 'a' ouvre le fichier en ajout ; les données écrites dans le fichier seront automatiquement ajoutées à la fin. 'r+' ouvre le fichier pour la lecture et l’écriture. L’argument mode est facultatif ; 'r' sera pris par défaut s’il est omis.
Pour écrire dans un fichier, on peut utiliser la primitive f.write( chaine ), qui écrit la chaîne de caractères dans le fichier
In [12]:
f.write('Voici un test\n')
Pour écrire quelque chose d’autre qu’une chaîne il est nécessaire de commencer par le convertir en chaîne :
In [13]:
value = ('la reponse est', 42)
s = str(value)
f.write(s)
Une fois le fichier utilisé, il faut le fermer avec f.close(). Après avoir appelé f.close(), les tentatives d’utiliser l’objet fichier échoueront automatiquement.
In [14]:
f.close()
Il existe une façon plus adéquate pour travailler sur un fichier, qui permet de ne pas avoir besoin d'utiliser close. Nous verrons cette syntaxe en utilisant f.read( taille ) qui lit une certaine quantité de données et les retourne en tant que chaîne de caractères. taille est un argument numérique facultatif. Quand taille est omis ou négatif, le contenu entier du fichier sera lu et retourné. Autrement, au plus taille octets sont lus et retournés.
In [15]:
with open('fichiertravail.txt', 'r') as f:
s = f.read()
print (s)
f.readline() lit une seule ligne à partir du fichier ; un caractère de fin de ligne (\n) est laissé à l’extrémité de la chaîne de caractères lue, et est seulement omis sur la dernière ligne du fichier si le fichier ne se termine pas par une fin de ligne. Cela rend la valeur de retour non ambiguë ; si f.readline() renvoie une chaîne de caractères vide, la fin du fichier a été atteinte, alors qu’une fin de ligne est représentée par '\n', une chaîne de caractères contenant seulement une seule fin de ligne.
In [25]:
with open('fichiertravail.txt', 'r') as f:
s = f.readline()
while s != '':
print (s)
s = f.readline()
f.readlines() renvoie une liste contenant toutes les lignes de données dans le fichier. Si un paramètre optionnel sizehint est donné, alors elle lit le nombre d’octets indiqué, plus autant d’octets qu’il en faut pour compléter la dernière ligne commencée, et renvoie la liste des lignes ainsi lues. Cela est souvent utile pour per- mettre la lecture par lignes efficace, sans devoir charger entièrement le fichier en mémoire. La liste retournée est entièrement faite de lignes complètes.
In [26]:
with open('fichiertravail.txt', 'r') as f:
lines = f.readlines()
for i, l in enumerate(lines):
print ('ligne', i, ':', l)
Les chaînes de caractères peuvent facilement être écrites et lues dans un fichier. Les nombres demandent un peu plus d’effort, puisque la méthode read() renvoie seulement les chaînes de caractères, qui devront être passées vers une fonction comme int(), qui prend une chaîne de caractères comme '123' et renvoie sa valeur numérique 123. Cependant, quand vous voulez sauvegarder des types de données plus complexes comme des listes, des dictionnaires, ou des instances de classe, les choses deviennent beaucoup plus compliquées.
Plutôt que faire écrire et déboguer constamment par les utilisateurs le code pour sauvegarder des types de données complexes, Python fournit un module standard appelé pickle. C’est un module étonnant qui peut prendre presque n’importe quel objet Python (même quelques formes de code Python !), et le convertir en une représentation sous forme de chaîne de caractères ; ce processus s’appelle pickling. Reconstruire l’objet à partir de sa représentation en chaîne de caractères s’appelle unpickling. Entre pickling et unpickling, la chaîne de caractères représentant l’objet a pu avoir été enregistrée dans un fichier ou des données, ou avoir été envoyée à une machine éloignée via une connexion réseau.
Si vous avez un objet x, et un objet fichier f ouvert en écriture, la voie la plus simple de pickler l’objet prend seulement une ligne de code :
pickle.dump(x, f)
Pour unpickler l’objet, si f est un objet fichier ouvert en lecture :
x = pickle.load(f)
Il est possible de manipuler les primitives systèmes en Python. La plupart des fonctions du système sont disponible dans le module os:
In [27]:
import os
Pour connaître toutes les fonctions disponibles, il est possible d'utiliser help(os) ou dir(os).
Pour les tâches courantes de gestion de fichiers et répertoires, la module shutil fournit une interface de haut niveau facile à utiliser :
In [29]:
import shutil
shutil.copyfile('fichiertravail.txt', 'macopie.txt')
shutil.move('macopie.txt', 'lacopie.txt')
Le module glob fournit une fonction pour construire des listes de fichiers à partir de recherches avec jockers (les *) dans des répertoires :
In [36]:
import glob
glob.glob('*.txt')
Out[36]:
Il y a un certain nombre de modules pour accéder à Internet et pour traiter les protocoles de l’Internet. Deux des plus simples sont urllib2 pour récupérer des données depuis des url et smtplib pour envoyer du courrier :
In [39]:
import urllib2
for line in urllib2.urlopen('http://www.python.org'):
if 'meta' in line: # on affiche uniquement les lignes contenant la balise meta
print (line)
Un exemple pour smtplib :
import smtplib
server = smtplib.SMTP('localhost')
server.sendmail('expediteur@a.com', 'destinataire@b.org',
"""To: destinataire
From: me
Un message de test
""")
server.close()
Les autres modules sont décrits ici : https://docs.python.org/2/library/
Gestion des chaînes de caractères
Types de données
Numeric and Mathematical Modules
File and Directory Access
Data Persistence
Data Compression and Archiving
File Formats
Cryptographic Services
Generic Operating System Services
Optional Operating System Services
Interprocess Communication and Networking
Internet Data Handling
Structured Markup Processing Tools
Internet Protocols and Support
Multimedia Services
Internationalization
Program Frameworks
Graphical User Interfaces with Tk
Development Tools
Debugging and Profiling
Python Runtime Services
__builtin__ — Built-in objects_builtins — Python 3 builtins__main__ — Top-level script environment__future__ — Future statement definitionsCustom Python Interpreters
Restricted Execution
Importing Modules
Python Language Services
Python compiler package
Miscellaneous Services
MS Windows Specific Services
_winreg – Windows registry accessUnix Specific Services
Mac OS X specific services
Ce notebook est une adaptation de la traduction française, dirigée par Olivier Berger et mise à jour par Henri Garreta, du tutoriel Python édité par Guido van Rossum et Fred L. Drake.