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 :

Gestion de fichiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut Gestion de fichiers
    Bonjour,

    J'ai un fichier source qui contient un certain nombres de lignes et je souhaiterais afficher à l'ecran devant chaque lignes le symbole *
    J'ai developpé un bout de code suivant:

    Récupérer les données du fichier source et les copier dans le fichier destination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os
    rep_cour = os.getcwd()
    print rep_cour
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    try:
        f = open(filename, "r")
    except:
        print "Le fichier", filename, "est introuvable"
    fd = open('destination.txt', 'w')
    while 1:
        txt = filename.readline()
        fd.write(txt)
    filename.close()
    fd.close()
    J'obtiens le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:/Users/lyon/Desktop/interactionhommemachine/fichier", line 11, in <module>
        txt = filename.readline()
    AttributeError: 'str' object has no attribute 'readline'
    svp, Selon vous quel est le souci ?

    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    là , c'est ecrit blanc sur noir :
    AttributeError: 'str' object has no attribute 'readline'
    tu ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    .
    .
    txt = filename.readline()
    c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fd = open('destination.txt', 'w')
    .
    txt = fd.readline()

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Février 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 2
    Par défaut heu....
    Moi je tenterais un truc du style:

    car "fd" est, si j'ai bien compris, le fichier de destination et

    "f" étant le nom fichier d'origine dont le nom est "filename"

    Bon code

  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
    Soyons clairs.

    Écrivons ton code avec des noms correspondant à ce qu’ils référencent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os
    rep_cour = os.getcwd()
    print rep_cour
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    try:
        f_base = open(filename, "r")
    except:
        print "Le fichier de nom", filename, "est introuvable"
    f_dest = open('destination.txt', 'w')
    while 1:
        ligne = f_base.readline()
        f_dest.write(ligne)
    f_base.close()
    f_dest.close()




    Et quelques remarques sur ce code:


    1)

    S’il s’agit de n’afficher que os.getcwd() et que la référence rep_cour ne sert pas ultérieurement dans le code, on peut condenser deux lignes en
    print os.getcwd()



    2)

    Il est bel et bon d’écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        f_base = open(filename, "r")
    except:
        print "Le fichier de nom", filename, "est introuvable"
    mais si c’est pour continuer, quel que soit le cas, par ouvrir un fichier en écriture et à chercher à lire dans un fichier f_base qui n’a pas pu être ouvert,
    ce n’est pas la peine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os
    rep_cour = os.getcwd()
    print rep_cour
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    try:
        f_base = open(filename, "r")
        f_dest = open('destination.txt', 'w')
        while 1:
            ligne = f_base.readline()
            f_dest.write(ligne)
        f_base.close()
        f_dest.close()
    except:
        print "Le fichier de nom", filename, "est introuvable"


    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        while 1:
            ligne = f_base.readline()
            f_dest.write(ligne)
    Ça va boucler à l’infini: quelle est la condition d’arrêt ?
    Cf 4.



    4) On peut écrire aussi une condition avec os.path.exists()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if os.path.exists(filename):
        f_base = open(filename, "r")
        f_dest = open('destination.txt', 'w')
     
        ligne = f_base.readline()
        while ligne:
            ligne = f_base.readline()
            f_dest.write(ligne)
        f_base.close()
        f_dest.close()
    else:
        print "Le fichier de nom", filename, "est introuvable"


    5) Sous Python 2.6 ou supérieur, on préfèrera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if os.path.exists(filename):
        with open(filename, "r") as f_base:
            with open('destination.txt', 'w') as f_dest:
                ligne = f_base.readline()
                while ligne:
                    ligne = f_base.readline()
                    f_dest.write(ligne)
    else:
        print "Le fichier de nom", filename, "est introuvable"


    6) On peut traiter le fichier sous sa forme de chaîne au lieu d’y découper les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os
     
    print os.getcwd()
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    if os.path.exists(filename):
        with open(filename, "r") as f_base:
            ch = '*' + f_base.read().replace('\n','\n*')
            with open('destination.txt', 'w') as f_dest:
                f_dest.write(ch)
    else:
        print "Le fichier de nom", filename, "est introuvable"
    Ceci en tenant compte de ce que tu présentes comme objectif.



    7) Mais pour « afficher à l'ecran devant chaque ligne le symbole * » , il n’est pas nécessaire de copier d’abord le fichier source dans un autre fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
     
    print os.getcwd()
    filename = raw_input("Veuillez entrer un nom de fichier : ")
    if os.path.exists(filename):
        with open(filename, "r") as f_base:
            print '*' + f_base.read().replace('\n','\n*'))
    else:
        print "Le fichier de nom", filename, "est introuvable"

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    un petit .readlines() serait le bienvenu au lieu de readline().

    et si on faisait ca!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try:
       monfichier=open('file','r')
       contenu=monfichier.readlines()
       destination=open('otherFile','w')
       destination.write(''.join(contenu))
       destination.close()
       monfichier.close()
    except:
       print 'fichier non valide...'
    plus concis, je préfére.

  6. #6
    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
    ben alors dans ce cas, airod, il suffit de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distutils.file_util.copy_file(filename,'otherFile')



    http://docs.python.org/distutils/api...util.copy_file

    Pensez à la documentation en ligne, ca aide!

Discussions similaires

  1. Gestion de fichier
    Par Zenol dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2005, 15h44
  2. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h52
  3. Fonctions de gestion de fichiers
    Par sebduth dans le forum Fortran
    Réponses: 4
    Dernier message: 22/08/2005, 10h38
  4. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 13h42
  5. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16

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