IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Tri d'un fichier texte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut Tri d'un fichier texte
    Bonjour,


    Je début en python, je cherche le moyen de recuperer un fichier txt qui ce presente de la forme suivante

    04/02/08 19:40:07 CLVCPTA15001 nviOccManCmd OC_NUL

    04/02/08 19:40:07 CLVCPTA15001 nvoSpaceTemp 24.17

    04/02/08 19:40:07 CLVCPTA15001 nviSetptOffset 0.00

    04/02/08 19:40:07 CLVCPTA15002 nviOccManCmd OC_STANDBY

    04/02/08 19:40:07 CLVCPTA15002 nvoSpaceTemp 24.10

    04/02/08 19:40:07 CLVCPTA15002 nviSetptOffset 327.67

    04/02/08 19:40:08 CLVCPTA15003 nviOccManCmd OC_NUL

    04/02/08 19:40:08 CLVCPTA15003 nvoSpaceTemp 24.17

    04/02/08 19:40:08 CLVCPTA15003 nviSetptOffset 0.00

    04/02/08 19:40:08 CLVCPTA15004 nviOccManCmd OC_STANDBY

    04/02/08 19:40:08 CLVCPTA15004 nvoSpaceTemp 24.59

    04/02/08 19:40:08 CLVCPTA15004 nviSetptOffset 327.67


    je cherche le moyenne de crée une liste puis pouvoir resortir toutes les variables nviOccManCmd qui sont en standby dans mon fichier dans un autre fichier texte.
    Je ne sais pas comment m'y prendre .


    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,

    C'est quoi une variable nviOccManCmd ? Le contenu de la ligne ? Ce qui est après "nviOccManCmd" ?
    Ça veut dire quoi "variables nviOccManCmd qui sont en standby dans mon fichier " ?
    Ça veut dire quoi "resortir des variables dans un autre fichier texte" ? Enregistrer les valeurs des variables dans un autre fichier ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    Je souhaite filtré le fichier de telle sorte qu'il reste que les lignes ou le mot standby est ecrit et le resultat obtenu soit inscrit dans un autre fichier de sortie.

    voici ce que je veut obtenir.

    04/02/08 19:40:07 CLVCPTA15002 nviOccManCmd OC_STANDBY
    04/02/08 19:40:08 CLVCPTA15004 nviOccManCmd OC_STANDBY

    nviOccManCmd est le nom d'un variable utiliser par un automate.

    Par la suite je cherche a faire d'autre filtre sur d'autre variable.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    En supposant que le fichier à filtrer est sur le disque dur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f = open('fichier a lire','r')
    frec = open('fichier receveur','w')
    for ln in f:
        if ln.count('STANDBY')==1:
            frec.write(ln)
    f.close()
    frec.close()
    Attention, Python fait la différence entre STANDBY' et 'standby'


    Si tu es sûr que dans le fichier à filtrer, le mot STANDBY qui doit déclencher la conservation de la ligne, ne peut jamais se trouver ailleurs qu'entre les positions 47 et 54 de la chaine de caractères qu'est une ligne ln ( ln[0] étant le premier caractère, ln[1] le deuxième etc) , tu peux aussi utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f = open('fichier a lire','r')
    frec = open('fichier receveur','w')
    for ln in f:
        if ln[47:54]=='STANDBY":
            frec.write(ln)
    f.close()
    frec.close()
    Si le fichier est gros, ce sera plus rapide.


    Il n'est pas possible de faire autrement que de créer un autre fichier pour mettre le résultat du filtrage: on ne peut pas enlever des bytes sur un disque dur entre certains caractères. Si le fichier une fois filtré n'est plus utile, tu peux l'éliminer par remove('fichier a lire')


    À savoir, si tu veux relire le fichier pour faire un autre test:
    une fois un fichier lu, le pointeur de ce fichier est positionné à la fin du fichier. Si on essaye de faire relire le fichier sans l'avoir fermé et réouvert, le programme ne lira rien.
    Pour relire un fichier depuis le début, il faut
    - soit faire f.close() puis réouvrir le fichier
    - soit faire f.seek(0)

    seek(x) déplace le pointeur jusqu'à la xième position (x+1 ième caractère du fichier je crois bien)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    merci eyquem

    ca fonctionne nikel j'ai encore une petite question je voudrais faire un autre filtre mais avec 2 conditions.

    je doit trouver toutes les température inferieure à 18 et supérieur à 27.
    la variable dans le fichier qui fait reférence à la température c'est nvoSpaceTemp.

  6. #6
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    fichier=open('TonFichier','r')
    #tout d'abord on récupère un liste de toutes les lignes contenant 'nvoSpaceTemp'
    contenu=[x for x in fichier.read().split('\n') if 'nvoSpaceTemp' in x]
    fichier.close()
    #ensuite on crée deux listes : une avec les températures <18, et une avec les temp > 27
    liste_18=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])<18]
    liste_27=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])>27]
     
    #on supprime contenu si on s'en servira plus (facultatif)
    del contenu
     
    #ensuite on converti chacune des liste en un texte avant d'écrire ce texte dans un fichier
    liste_18='\n'.join(liste_18)
    fichier=open('Fichier_18','w')
    fichier.write(liste_18)
    fichier.close()
     
    liste_27='\n'.join(liste_27)
    fichier=open('Fichier_27','w')
    fichier.write(liste_27)
    fichier.close()
     
    #de mêm que pour contenu, on supprime liste_18 et liste_27 si on ne s'en set plus par la suite (sauf si c'est la fin du programme)
    del liste_18,liste_27
    En espérant que tu ai compris la façon un peu spéciale employée pour créer les liste...

    Au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> a=[1,2,3,4,5,6,7,8,9]
    #pour créer une liste avec seulement les éléments de a qui sont paire:
    >>> b=[x for x in a if x%2==0]
    >>> print b
    [2,4,6,8]
     
    #si on avait fait simplement
    >>> b=[x for x in a]
    >>> print b
    [1,2,3,4,5,6,7,8,9]

Discussions similaires

  1. [Turbo Pascal] Tri d'un fichier texte selon la longueur de chaque ligne
    Par Almoez dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 19/10/2012, 18h03
  2. tri d'un fichier text
    Par dark_nights dans le forum C++
    Réponses: 9
    Dernier message: 21/01/2009, 17h34
  3. Tri d'un fichier texte, commande sort
    Par fantomas261 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/04/2007, 16h01
  4. tri d'un fichier texte
    Par ben127 dans le forum C
    Réponses: 7
    Dernier message: 23/12/2005, 20h03
  5. Réponses: 4
    Dernier message: 16/12/2005, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo