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 :

Problème de lecture/ecriture dans un fichier txt


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Problème de lecture/ecriture dans un fichier txt
    Bonjour à tout ceux qui me liront,

    Voilà mon pb : pour permettre à deux scripts de s'échanger une variable (ou plusieur...), je les écris dans un fichier txt au moyen de :
    - dans le script "émetteur" de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichier = '\truc\bidule\variables.txt'
    f = open(fichier, 'w+')
    f.write(variable_a_ecrire)
    f.close
    - dans le script "récepteur" de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichier = '\truc\bidule\variables.txt'
    f = open(fichier, 'r+')
    variable = f.readline()
    f.close
    Le problème, quand les deux programmes s'enchainent automatiquement (et donc rapidement), le récepteur trouve le fichier variables.txt vide (alors que quand je le regarde avec l'explorateur, je vois bien qu'il n'est pas vide...). Si par contre je lance le deuxième script manuellement (quelques secondes plus tard), ça fonctionne... J'y comprends rien.
    J'ai donc pensé à mettre une pause avant de lancer le script récepteur de la variable mais ça ne change rien.
    Python met-il du temps à fermer le fichier (f.close), est-ce que je m'y prends mal??? A L'AIDE SVP!!!
    Merci d'avance et bonne journée,

    Fred

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Bon, bah je me répond à moi même :
    Il fallait rajouter un f.flush avant de fermer le fichier dans le script émetteur pour que le fichier s'actualise correctement.
    Bonne journée,

    Fred

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Il manque surtout les parenthèses d'appel de f.close(), si tu ne les mets pas, ta fonction n'est pas appelée
    le flush() se fait automatiquement si tu appelles close()

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Bien reçu Oiffrig et merci.
    Je ne le savais pas et, du coup, il faut que je revois tous les scripts que j'ai écrit car je pense ne jamais avoir mis de parenthèses...
    Salut,

    Fred

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    En effet j'ai déjà eu cette erreur, elle est assez dure à detecter

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Si c'est pour de l'échange entre programme, je créerais deux fichiers :
    - le fichier qui a les données
    - un fichier marqueur pour signaler que les données sont prêtes.

    Ce qui donnerais un code comme cela (attention, je ne l'ai pas exécuté)
    Pour l'émetteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # écriture de la donnée
    f = open('variables.txt', 'w+')
    f.write(variable_a_ecrire)
    f.close()
     
    # on signale que la donnée est prête
    f = open('variables.fin', 'w')
    f.close()
    Pour le récepteur :
    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
     
    # on attend que les données soient prête en scrutant le fichier
    # variables.fin
    ok = 0
    while ok == 0:
         try:
            f = open('variables.fin','rt')
            f.close()
            ok = 1
         except:
             # on réessayera plus tard
            time.sleep(1)
     
    # arrivé ici, on sait que le fichier variable.fin existe, donc le fichier 
    # variables.txt peut être lu sans problème
     
    f = open('variables.txt', 'rt')
    variable = f.readline()
    f.close
    Un fois que le récepteur a lu et traité les données, il prendra soins d'effacer les deux fichiers : le '.txt' et le '.fin' .

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Merci pour toutes ces réponses.
    Emanuel_dumas, l'idée de confirmation n'est pas mauvaise, je m'en inspirerai quand je serai moins à l'arrache dans le timing...
    Bonne journée,

    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme lecture ecriture dans des fichiers
    Par xman_genius dans le forum C
    Réponses: 9
    Dernier message: 16/01/2007, 19h50
  2. Réponses: 8
    Dernier message: 07/09/2006, 11h43
  3. Lecture ecriture dans un fichier binaire
    Par laetous dans le forum C
    Réponses: 13
    Dernier message: 26/08/2006, 08h50
  4. Lecture répétitive dans un fichier txt
    Par Didine95 dans le forum Langage
    Réponses: 9
    Dernier message: 20/07/2006, 14h30
  5. ouverture/lecture/ecriture dans un fichier en mode binaire
    Par dirty_boy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2006, 08h38

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