Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Ecriture dans un fichier texte

Le langage Python permet, bien naturellement, de manipuler des fichiers. Dans l'exemple proposé ci-dessous, nous allons générer un fichier texte contenant des données mises en forme dans un tableau (en mode console). Les colonnes sont dimmensionnées en fonction de la plus grande chaîne de caractères de chaque colonnes.

Exemple de code

 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 
#!/usr/bin/python3
# -*- coding: utf-8 -*- 
                                
import sys

# Pour la ligne de titre
columnNames = ( "Code", "First name", "Last name", "Email" )

# Le jeu de données à écrire dans le fichier
spies = [
    ( "007", "James", "Bond", "007@mi6.uk" ),
    ( "Treadstone", "Jason", "Bourne", "bourne@cia.us" ),
    ( "Bean", "Johnny", "English", "bean@mi0.uk" )
]

# On calcule la taille de la plus longue chaîne
# de caractères pour chaque colonne du tableau.
columnSizes = [ 0, 0, 0, 0 ]
for column in range(4):
    maxSize = len( columnNames[column] )
    for line in spies:
        maxSize = max( len( line[column] ), maxSize )
    columnSizes[ column ] = maxSize

# On prépare les formats des lignes utilisés pour écrire dans le fichier

# calcule : +------------+------------+-----------+---------------+
separatorRow = "+%s+%s+%s+%s+" % ( "-" * ( columnSizes[0] + 2 ),
                                   "-" * ( columnSizes[1] + 2 ),
                                   "-" * ( columnSizes[2] + 2 ),
                                   "-" * ( columnSizes[3] + 2 ) )
# calcule : | %-10s | %-10s | %-9s | %13s |
lineFormat = "| %%-%ds | %%-%ds | %%-%ds | %%%ds |" % \
    ( columnSizes[0], columnSizes[1], columnSizes[2], columnSizes[3] )

# On génère notre fichier avec les données formatées
try: 
    # L'instruction with garantie la fermeture du fichier en fin de bloc
    with open( "spies.txt", "w" ) as spiesFile:
        print( separatorRow, file=spiesFile )
        print( lineFormat % columnNames, file=spiesFile )
        print( separatorRow, file=spiesFile )
        for spy in spies:
            # spy correspond à un tuple de la liste spies
            # => on peut donc s'en servir avec l'opérateur de formatage
            print( lineFormat % spy, file=spiesFile )
        print( separatorRow, file=spiesFile )

    print( "File generated" )

except IOError as exception:
    print( "Cannot write data to file " + str(exception), file=sys.stderr )
Fichier ExportSpies.py

Pour lancer cet exemple, veuillez procéder ainsi :

$> python3 ExportSpies.py 
+------------+------------+-----------+---------------+
| Code       | First name | Last name |         Email |
+------------+------------+-----------+---------------+
| 007        | James      | Bond      |    007@mi6.uk |
| Treadstone | Jason      | Bourne    | bourne@cia.us |
| Bean       | Johnny     | English   |   bean@mi0.uk |
+------------+------------+-----------+---------------+
$>
L'utilisation de l'instruction with avec l'ouverture du fichier permet de garantir sa fermeture automatique en fin de bloc.