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 :

manipuler les fichiers python


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut manipuler les fichiers python
    Bonjour,

    J'ai la situation suivante :

    Deux fichiers : source, destination.

    le fichier source : contient les chaines suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DN=470002988
    DN=470002989
    DN=470002982
    je veux que le fichier destination avoir ça :

    DN=470002988 seulement lors de la première exécution du programme python.
    DN=470002989 seulement lors de la deuxième exécution du programme python.
    DN=470002982 seulement lors de la troisième exécution du programme python.

    Voici mes efforts :

    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
     
    #le fichier source en lecture
    F1 = open("source.txt", "r")
     
    #récupérer la première ligne dans fichier source
    txt = F1.read(12)
    #print txt
     
    #Ecrire dans le fichier destination 
    F2 = open("destination.txt", "w")
    F2.write(txt)
     
    #ce bloc va supprimer la première ligne et laisser les autres  sur le fichier source 
    F3=open("source.txt", "w") 
    for ligne in F1:
        if ligne==txt:
            F3.write("")
            break
    F1.close()
    F2.close()
    F3.close()
    Le problème est sur le dernier bloc, j'arrive pas à garder les autres lignes et supprimer juste la ligne que j'ai transféré vers le fichier destination.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    À partir de ligne 14, vous supprimez le fichier source, vous ne pouvez plus traiter de lignes dessus, il est vide !

    À partir de la ligne 15, il faudra donc traiter avec le contenu se trouvant dans la variable txt afin qu'il ne reste plus que les deux dernières lignes à écrire. Vous aurez quelque chose de cette forme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> txt = """DN=470002988
    ... DN=470002989
    ... DN=470002982"""
     
    >>> txt.splitlines()
    ['DN=470002988', 'DN=470002989', 'DN=470002982']
     
    >>> txt.splitlines()[1:]
    ['DN=470002989', 'DN=470002982']
    Plus qu'à les écrire avec la méthode writelines.

    P.S pour écrire la première ligne du fichier pourquoi pas simplement la méthode readline ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Relisez votre code:
    #ce bloc va supprimer la première ligne et laisser les autres sur le fichier source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    F3=open("source.txt", "w") 
    for ligne in F1:
        if ligne==txt:
            F3.write("")
            break
    open("source.txt", "w") retourne un pointeur vers le début du fichier.
    "for ligne in F1" va lire les lignes restantes (puisque vous avez déjà lu la première ligne)...
    Dans le meilleurs des cas, vous aurez écrit "" dans ce fichier... et donc pas surprenant qu'à la fin, il ne contienne rien.
    Vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F3=open("source.txt", "w") 
    for ligne in F1:
            F3.write(ligne)
    Cette technique ne fonctionne pas dans le cas général car les lignes des fichiers textes étant de longueur variable difficile de savoir si ce qu'on écrit n'ira pas écraser ce qu'on n'a pas encore lu... Dans votre cas, çà peut fonctionner parce que les lignes sont de longueur fixe et que vous supprimez la première ligne.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    "for ligne in F1" va lire les lignes restantes (puisque vous avez déjà lu la première ligne)...
    - W
    F1 c'est le fichier source, for ligne in F1 va lire aussi la première ligne que j'ai transféré vers destination.txt car elle n'as pas été supprimé dans le fichier source.txt pour la première exécution du programme python.


    Citation Envoyé par wiztricks Voir le message
    Vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F3=open("source.txt", "w") 
    for ligne in F1:
            F3.write(ligne)
    - W
    F3 va contenir les meme lignes du F1.

    Le problème c'est que à chaque exécution du programme je veux que destination.txt va contenir une ligne (première pour premier exécution du python, deuxième pour 2éme exécution, ...)

    J'ai réfléchis du supprimer chaque fois la ligne sur source.txt que j'ai transféré vers destination.txt pour que je dois, pour la deuxième exécution, voir les lignes restants. c'est ça l'idée mais j'arrive pas à appliquer.

    Merci d'avance.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Citation Envoyé par hichem0550 Voir le message
    F1 c'est le fichier source, for ligne in F1 va lire aussi la première ligne que j'ai transféré vers destination.txt car elle n'as pas été supprimé dans le fichier source.txt pour la première exécution du programme python.
    Ce for ligne in F1 vient après l'instruction txt = F1.read(12) écrite par vous ligne 6.
    La première ligne a donc déjà été lue...

    Python étant un langage interprété, lancer la console interactive et taper quelques instructions pour vous assurer que Python fait bien ce que vous pensez qu'il fait devrait être un réflexe.

    Citation Envoyé par hichem0550 Voir le message
    J'ai réfléchis du supprimer chaque fois la ligne sur source.txt que j'ai transféré vers destination.txt pour que je dois, pour la deuxième exécution, voir les lignes restants. c'est ça l'idée mais j'arrive pas à appliquer.
    Je vous ai donné la solution avec quelques explications. Après c'est à vous de travailler avec la console Python pour voir ce qu'il se passe et essayer de comprendre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 630
    Points : 30 860
    Points
    30 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hichem0550 Voir le message
    je veux que le fichier destination avoir ça :

    DN=470002988 seulement lors de la première exécution du programme python.
    DN=470002989 seulement lors de la deuxième exécution du programme python.
    DN=470002982 seulement lors de la troisième exécution du programme python.

    Voici mes efforts :...
    Bonjour

    Je pense que supprimer le contenu du fichier source n'est pas une super idée. Parce que déjà la modification du fichier source c'est pas tiptop (supprimer la première ligne oblige alors à lire tout le reste en écrasant à la ligne "n" ce qu'on lit à la ligne "n+1") ; et surtout ça interdit tout retour en arrière possible.
    Perso j'aurais plutôt créé un 3° fichier de contrôle contenant l'instance en cours. Donc à la première exécution du programme python on y écrit "1". A la seconde on y écrit "2" et etc.

    Ensuite ne reste plus qu'à lire la "nième" ligne du fichier source (n correspondant à l'instance en cours dans le fichier de contrôle) et écrire la ligne correspondante dans le fichier destination.

    Beaucoup plus souple à l'usage. Déjà d'une part ça évite ces accès concurrent au fichier source ; et d'autre part si par exemple on veut revenir à l'instance "3" ben on ouvre le fichier de contrôle et on y remplace ce qui s'y trouve par "3".

    Ensuite, si on veut être un peu plus professionnel, on remplace le fichier de contrôle par un fichier de config (qu'on traite avec ConfigParser) et de suite ça a un peu plus d'allure...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Manipuler les fichiers mp3
    Par pierrot la lune dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2010, 15h58
  2. Réponses: 0
    Dernier message: 09/11/2009, 14h52
  3. Manipuler les fichiers Matlab en binaire
    Par melleb dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/07/2008, 12h51
  4. Les commandes SQL*Plus manipulant les fichiers
    Par Maria1505 dans le forum Sql*Plus
    Réponses: 3
    Dernier message: 08/11/2006, 12h30
  5. Réponses: 8
    Dernier message: 26/08/2006, 02h22

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