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

  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 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    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!

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    si l'idée c'est juste de faire une copie de fichier:


  8. #8
    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
    ben par rapport au post de départ, soit on a pas toutes les infos, soit il faut aller au plus simple en effet...
    J'ai pensais au shutil, mais là ca pousse loin la fainéantise des neurones

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