begin process at 2010 09 04 16:06:24
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > traitement sequentiel des fichiers

traitement sequentiel des fichiers


 Information sur le tutoriel

Note :
Aucune note

 Description

Ce tutoriel explique comment traiter les fichiers de manière séquentielle, c'est à dire ligne par ligne. Il apprend a ouvrir, lire, créer des fichier

Tutorial

Gestion des fichiers

  • Role des fichiers

Echange de données entre plusieurs programmes
Permet de stocker des ensembles d'informations appelés "enregistrement"
Conserver des données à la fermeture d'une application
Récupérer des données à l'ouverture d'une application

  • Utilisation séquentielle (ligne par ligne)
  1. Préliminaires

Tout d’abord, il faut définir le répertoire dans lequel les fichiers seront stockés, pour cela, on a besoin d’importer les fonctions de la librairie os, il faut écrire en haut du programme :
from os import *
Puis :
chdir('C:\CheminRepertoire’)
Pour définir le dossier dans lequel on veut travailler.
Pour afficher le dossier courant :
print getcwd()

  1. Ouverture/Création d’un fichier

Fichier=file(NomFichier.type, mode)
#Type est l'extension, .txt pour un fichier texte classique
#mode est un mode d'ouverture

Modes :
'r' : le ficher existe déjà, ouverture en lecture seule

'w' : le fichier est ouvert en écriture seule, s'il existe déjà, il est tronqué et écrasé ; il est créé sinon.

'a' : le fichier est ouvert en écriture seule. S'il existe son contenu est conservé et les données ajoutées à la suite; il est créé sinon.

'r+' : le fichier doit déjà exister, est ouvert en lecture et écriture.

'w+' : le fichier est ouvert en lecture et en écriture, s'il existe déjà, il est tronqué et écrasé ; il est créé sinon.


Il est important de toujours fermer les fichiers après utilisation :

NomFichier.close()


  1. Lecture des lignes


En mode séquentiel, on lit les lignes les unes après les autres :

Ligne=NomFichier.readline()


Nous allons donner un exemple : Le fichier Premier.txt, dans le dossier ‘D:\Dossier Nombres’ contient la liste des nombres premiers entre 1 et 10 ; contenu du fichier :

2

3

5

7

Nous voulons lire le contenu de ce fichier dans notre programme :

from os import *

chdir('D:\Dossier Nombres')

Liste=file('Premier.txt','r')

Ligne=Liste.readline()

while Ligne<>"":

#Tant que les lignes ne sont pas vides

print Ligne

Ligne=Liste.readline()

Liste.close()


Resultat

>>>

2

3

5

7


  1. Ecriture dans un fichier

Pour écrire dans un fichier, on utilise write(), en ayant préalablement ouvert le fichier en mode ‘w’ ou ‘w+’.

Pour aller à la ligne, on écrit dans le fichier ‘\n’


Exemple : Nous voulons ajouter dans un fichier la lise des nombres premiers entre 1 et 10 en les indexant selon leur rang, c'est-à-dire :

1) 2

2) 3

3) 5

4) 7

Le fichier n’est pas encore créé.


from os import *

chdir('D:\Dossier Nombres')

fichier=file('Premier2.txt','w')

fichier.write('1) 2'+'\n')

fichier.write('2) 3'+'\n')

fichier.write('3) 5'+'\n')

fichier.write('4) 7'+'\n')

fichier.close()


Resultat

1) 2

2) 3

3) 5

4) 7


Commentaires

Commentaire de xeolin le 27/11/2008 12:17:56

Très bon tuto.

mais on préfère :

while Ligne != "":

à

while Ligne<>"":

et fichier=open('Premier2.txt','w')
à fichier=file('Premier2.txt','w')

(ce dernier sera retirer, normallement, dans python 3.0)

Sinon c'est un bon boulot.

Commentaire de thibault7249 le 04/02/2009 13:50:17

Merci personnellement,ça m'a beaucoup aidé :D

Commentaire de L20 le 21/05/2009 17:12:50

Super, merci !

Commentaire de Julien39 le 22/05/2009 10:59:49

Je suis content que ça vous ait servi.

Commentaire de Clempython le 03/01/2010 01:39:42

cette méthode de lecture est très lente, il vaut mieux utiliser:

dico = file("top10000fr.txt",'r')
x = dico.readlines()
dico.close() # fin de l'utilisation du fichier

# conversion en liste de mots sans \n
dico = []
for mot in x:
dico.append(mot[0:len(mot)-1])

Commentaire de Julien39 le 03/01/2010 08:25:05

oui, c'est vrai que ta méthode est plus rapide mais mon tutoriel s'appelle traitement SEQUENTIEL des fichiers, donc, ta remarque est hors sujet...

Commentaire de Clempython le 04/01/2010 21:42:05

Pas du tout après on fait le traitement séquentiel sur la liste obtenue, c'est juste plus rapide et plus simple.

Commentaire de Julien39 le 06/01/2010 12:29:32

Le traitement séquentiel est de lire le fichier ligne par ligne, la méthode .readlines() n'est pas une méthode séquentielle puisqu'elle lit toutes les lignes du fichier d'un coup.

Il est vrai que dans l'exemple que j'utilise, il serait plus rapide et plus simple d'utiliser cette méthode mais, je voulais montrer comment lire les fichiers de manière séquentielle, donc je ne l'ai pas utilisée.

Commentaire de Clempython le 06/01/2010 20:07:06

Non, ça charge le fichier ligne par ligne dans une liste (un seul chargement) c'est ensuite que l'on fait le traitement "séquentiel" sur la liste élément par élément.

C'est un bon tutoriel pour celui qui veut commencer la programmation par python en prenant les bons réflexes et qui ne cherche pas la performance à tout prix.

Commentaire de Julien39 le 10/01/2010 08:00:15

ha d'accord, je pensais que sequentiel vennait du fait que le fichier était lu ligne par ligne, alors tu as raison.

Commentaire de gb24 le 01/04/2010 23:11:14

Pourriez-vous traiter le cas suivant :
plusieurs fichiers à lire dans lesquels les données sont séparées par ;
dans 1 fichier les données sont a;c;f;g;b;x;e;d;h;k;v;m
dans un autre b;e;a;d;c;x;g;t;f;m;n;o;p;q
certains champs pouvant être vides
etc...
il faut les ecrire dans un autre fichier sous la forme a;b;c;d;e;f
C'est possible ?

Commentaire de Julien39 le 02/04/2010 07:06:02

oui c'est possible, je pense qu'avec ce qu'il y a dans le tutoriel, vous pouvez vous en sortir sans trop de problème.

Commentaire de gb24 le 02/04/2010 17:13:46

Ca c'est de l'aide ! Merci.
Si ça peut vous aider, voilà ce que j'ai fait (pour partie).
Il doit y avoir d'autre méthodes plus souples ou plus rapides.

fichs=open("nb.csv", "r")
fichd=open("nbw.csv", "w")

sep=';'
while 1:
    ligne=fichs.readline()
    print ligne
    if ligne=="":
        break
    
    lst=ligne.split(';')
    lw=(lst[10]+sep+lst[11]+sep+lst[12]+sep+lst[6]+sep+lst[15]+sep+lst[16]+sep+lst[18]+sep+lst[19]+'\n')  
    fichd.write(lw)
  
fichs.close()
.......autres fichiers en lecture
fichd.close()

exit

Commentaire de aera group le 28/07/2010 14:21:01

Bonjour à tous,

Julien39 à raison lorsqu'il explique que la méthode read() ou readlines() n'est pas une méthode de LECTURE séquentielle.

En effet, avec l'une de ces deux méthodes permet de lire l'intégralité du fichier et de faire par la suite un TRAITEMENT séquentiel.

la lecture séquentiel peu être utiliser par exemple dans la récupération et la réparation d'un fichier.


Imaginons un fichier endommagé mais dont on connait la méthode de construction.
Par exemple un fichier contenant des données entre des balises de ce genre :

   <nom>
   Julien
   </nom>
   <nom>
   Rémy
   </nom>

Ici le fichier enregistre des nom (ou prénom :p)
Imaginons qu'au cours d'un transfère le fichier soit partiellement détruit :

   <nom>
   Julien
   </nowx
   <nom>
   Rémy
   </nom>

À la 3ème ligne, </nom> et devenu </nowx
Le programme de lecture du fichier qu'il face une lecture séquentielle ou un traitement séquentiel détecte une erreur et s'il est bien fait génère une erreur.

Un programme de récupération peu réparé ce fichier. En effet il sait que après la balise <nom> et la donnée, la ligne suivante doit logiquement être </nom>
D'où cette erreur de copie est facilement réparable (plus problématique si c'était la donnée qui était endommagée - même impossible a détecté sans un système de vérification de donnée)

Si le programme de récupération effectue un traitement séquentiel, il doit d'abord tout lire, puis traiter séquentiellement les données lue, trouver l'erreur, retenir sa position puis ré-ouvrir le fichier en écriture et modifier la ligne.

Si le programme est en lecture/écriture (mode r+ de Python) il lui suffit d'analyser en direct les ligne qu'il lit et de modifier celle qui ne fonctionne pas => gain de temps puisque le fichier n'est lu que la ou le problème existe et nom la totalité du fichier + 2 ouvertures du fichier une fois en lecture l'autre en écriture



Voila c'était un peu long mais je crois que c'est assez claire. Bon tuto Julien39

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales