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 :

fichier à accès direct


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut fichier à accès direct
    Bonjour,
    Le programme ci-dessous bug au niveau du fic1.write() :
    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
    if var6 != -1:
        try:
            fic1 = open("ficPrincipal.fad",'r+b')
            print('ouverture de ficPrincipal en mode r+b')                                    
            fic1.seek(0,2)
        except:
            fic1 = open("ficPrincipal.fad",'wb')
            print('creation du fichier')
            fic1.close()
            fic1 = open("ficPrincipal.fad",'r+b')
            print('REEEEEE_ouverture en mode r+b')                                    
     
    print('repere 1')
    fic1.write('quelque chose')#bug
    print('repere 2')
    Quelqu'un aurait-il une explication ?
    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Ce serait mieux de poster un programme minimal qui reproduit le bug. Si ce que tu veux faire est compléter un fichier déjà existant, il y a beaucoup plus simple.

    A+

    Pfeuh

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    J'ai commenté :

    Citation Envoyé par promeneur2 Voir le message
    Bonjour,
    Le programme ci-dessous bug au niveau du fic1.write() :
    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
    if var6 != -1:
        try:
            fic1 = open("ficPrincipal.fad",'r+b')
            print('ouverture de ficPrincipal en mode r+b')                                    
            fic1.seek(0,2)
        except:
            fic1 = open("ficPrincipal.fad",'wb')      # ici tu ouvres en ecriture
            print('creation du fichier')
            fic1.close()                                       # ensuite tu le fermes
            fic1 = open("ficPrincipal.fad",'r+b')      # tu le réouvres en lecture
            print('REEEEEE_ouverture en mode r+b')                                    
     
    print('repere 1')
    fic1.write('quelque chose')      # ... et tu veux ecrire dedans
    print('repere 2')
    Quelqu'un aurait-il une explication ?
    Merci d'avance
    Non ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            fic1 = open("ficPrincipal.fad",'wb')      # ici tu ouvres en ecriture
            print('creation du fichier')
            fic1.close()                                       # ensuite tu le fermes
            fic1 = open("ficPrincipal.fad",'r+b')      # tu le réouvres en lecture
            print('REEEEEE_ouverture en mode r+b')                                    
     
    print('repere 1')
    fic1.write('quelque chose')      # ... et tu veux ecrire dedans
    print('repere 2')
    Du coup j'ai un doute : il me semblait selon certains tutos, que 'r+b' permettait lecture et écriture ???
    http://python.jpvweb.com/mesrecettes...r_acces_direct
    (Pfeuh, pour l'accès séquentiel c'est à peu près ok, je m'en sorts (presque)).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut modes d'ouverture de fichiers
    Je me répond :
    Le premier argument contient le nom de fichier. Le deuxième argument décrit le mode d'utilisation du fichier.
    Le mode peut être 'r' quand le fichier sera seulement lu, 'w' pour seulement écrire (un fichier existant avec le même nom sera effacé)
    et 'a' un ouvre le fichier pour rajout; n'importe quelles données écrites au fichier sont automatiquement ajoutées à la fin.
    'r+' ouvre le fichier tant pour la lecture que pour l'écriture. Faute de préciser l'argument 'mode', le fichier souvrira en mode 'r'.
    Sous Windows, 'b' ajouté au mode ouvre le fichier dans le mode binaire, ainsi il y a aussi des modes comme 'rb', 'wb' et 'r+b'.
    Le python sous Windowss fait une distinction entre le texte et des fichiers binaires; les caractères de
    fin-de-ligne dans des fichiers texte sont automatiquement changés légèrement quand les données sont lues ou écrites.
    Cette modification en arrière plan pour traiter des données est pratique pour des fichiers texte d'ASCII, mais
    il corrompra des données binaires comme dans des FICHIERS d'EXE ou le JPEG. Soyez très prudents en utilisation du mode binaire en lecture.

    Traduction grossière (je fatigue) de : http://docs.python.org/tutorial/inpu...-writing-files

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut
    Là, ça marche (pour l'instant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!usr/bin/python
    # -*- coding: utf-8 -*-
    fichier = "ficPrincipal.fad"
    try:
        fic1 = open(fichier,'r+b')
        print('1')
        fic1.seek(0,2)
    except:
        fic1 = open(fichier,'w')
        fic1.close()
        fic1 = open(fichier,'r+b')
        print('2')
    contenu = bytes("ligne 1",'utf-8') # apparemment il manquait le bytes entre autres...
    fic1.write(contenu)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/03/2010, 08h17
  2. Lecture fichier (acces direct)
    Par Invité dans le forum C
    Réponses: 1
    Dernier message: 30/01/2010, 15h32
  3. [Fortran 77] Fichier à accès direct
    Par ERICKO dans le forum Fortran
    Réponses: 15
    Dernier message: 31/03/2009, 14h01
  4. Fichier acces direct et sequentiel
    Par malav dans le forum C
    Réponses: 4
    Dernier message: 29/01/2009, 16h09
  5. Réponses: 7
    Dernier message: 18/03/2006, 13h16

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