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 :

Ecriture sélective dans un fichier.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club Avatar de raymondpuce
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut Ecriture sélective dans un fichier.
    Bonjour à tous,

    Ultra débutant en Python et pas de la première jeunesse (69 ans)....mes rarissimes neurones butent sur un problème..(qui va sembler à certains enfantin !!!)

    J'ai un fichier txt composé de lettres, de chiffres et de caractères spéciaux en lecture de 120 (je peux changer ça) caractères par ligne...

    ce fichier se compose ainsi :

    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxtabcxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxtxyztxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...

    mon problème est que j'arrive bien à détecter le début abc et la fin xyz et à écrire dans un autre fichier ces 2 lignes...mais pas les lignes entre ces 2 trouvailles !!

    Ce que je voudrai obtenir c'est ça :

    abcxttxttxttxttxttxttxttxttxtt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxttxttxttxttxt...
    txttxttxttxttxttxttxttxttxtxyz

    Merci de votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par raymondpuce Voir le message
    Merci de votre aide.
    Pas facile de vous aider si on ne sait même pas comment vous lisez votre fichier! Postez un peu de code, çà aiderait à se mettre à votre niveau.

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

  3. #3
    Membre du Club Avatar de raymondpuce
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Pas facile de vous aider si on ne sait même pas comment vous lisez votre fichier! Postez un peu de code, çà aiderait à se mettre à votre niveau.

    - W
    OK en toute humilité.....
    Voilà un de mes nombreux essais :


    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
    code = open ("resultat.txt","r")
    codex = open("codex.txt", "w")
    chaine1 = 'abc' 
    chaine2 = 'xyz'
     
    contenu = code.readlines() 
    for ligne in contenu:
    	if chaine1 in ligne: 
    		print('Jai trouve abc en ligne : -->')+ligne
    		codex.write(ligne)
    	if chaine2 in ligne: 
    		print('Jai trouve xyz : -->')+ligne
    		codex.write(ligne)
    		break
     
    code.close
    codex.close

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    pensez à utiliser la fonction # dans l'éditeur du forum qui permet de baliser votre code et ainsi de mettre en coloration syntaxique et surtout de conserver l'indentation.


    Vous savez donc détecter la ligne de début et celle de fin, sauf que pour extraite les lignes entre il vous manque une variable qui dise que le bloc de début a été détecté et ce jusqu'à celui de fin.

    Il vous faut créer une variable avant votre boucle for, initialisée sur False puis passez-la à True une fois le début détécté, il ne restera plus qu'à gérer 3 conditions exclusives (si, sinon si...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if detected:
        ...
    elif début:
        ...
    elif fin: # Est-ce que la fin peut se présenter avant le début ? Auquel cas il faudra gérer si début a été détecté
        ...
        break
    else: continue # Pas nécessaire si il n'y a pas de suite de code dans la boucle for

  5. #5
    Membre du Club Avatar de raymondpuce
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Citation Envoyé par YCL-1 Voir le message
    Bonsoir,

    pensez à utiliser la fonction # dans l'éditeur du forum qui permet de baliser votre code et ainsi de mettre en coloration syntaxique et surtout de conserver l'indentation.


    Vous savez donc détecter la ligne de début et celle de fin, sauf que pour extraite les lignes entre il vous manque une variable qui dise que le bloc de début a été détecté et ce jusqu'à celui de fin.

    Il vous faut créer une variable avant votre boucle for, initialisée sur False puis passez-la à True une fois le début détécté, il ne restera plus qu'à gérer 3 conditions exclusives (si, sinon si...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if detected:
        ...
    elif début:
        ...
    elif fin: # Est-ce que la fin peut se présenter avant le début ? Auquel cas il faudra gérer si début a été détecté
        ...
        break
    else: continue # Pas nécessaire si il n'y a pas de suite de code dans la boucle for

    Merci. Je crois avoir compris. Je vais faire un essai...

  6. #6
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par raymondpuce Voir le message
    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
    code = open ("resultat.txt","r")
    codex = open("codex.txt", "w")
    chaine1 = 'abc' 
    chaine2 = 'xyz'
     
    contenu = code.readlines() 
    for ligne in contenu:
    	if chaine1 in ligne: 
    		print('Jai trouve abc en ligne : -->')+ligne
    		codex.write(ligne)
    	if chaine2 in ligne: 
    		print('Jai trouve xyz : -->')+ligne
    		codex.write(ligne)
    		break
     
    code.close
    codex.close
    on est d'accord qu'avec ce code, si abc est sur la ligne 3 et xyz sur la ligne 7, le fichier final contiendra uniquement les lignes 3 et 7, et pas les lignes intermédiaires (4, 5 et 6 donc) ?

    s'il n'est question à ce stade que de virer ce qui pendouille avant/après les marqueurs on peut utiliser du slicing pour extraire la portion qu'on souhaite (machaine[début:fin]) et la méthode index()

    ainsi ligne[ligne.index('abc'):] prendra la portion de chaîne depuis abc inclus (début) jusqu'à la fin (omis après les :), et réciproquement pour ligne[:ligne.index('xyz')] (note la place des : donc)



    edit: penser éventuellement au cas limite où abc et xyz sont sur la même ligne : ligne[ligne.index('abc'):ligne.index('xyz')]

  7. #7
    Membre du Club Avatar de raymondpuce
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,


    on est d'accord qu'avec ce code, si abc est sur la ligne 3 et xyz sur la ligne 7, le fichier final contiendra uniquement les lignes 3 et 7, et pas les lignes intermédiaires (4, 5 et 6 donc) ?

    s'il n'est question à ce stade que de virer ce qui pendouille avant/après les marqueurs on peut utiliser du slicing pour extraire la portion qu'on souhaite (machaine[début:fin]) et la méthode index()

    ainsi ligne[ligne.index('abc'):] prendra la portion de chaîne depuis abc inclus (début) jusqu'à la fin (omis après les :), et réciproquement pour ligne[:ligne.index('xyz')] (note la place des : donc)



    edit: penser éventuellement au cas limite où abc et xyz sont sur la même ligne : ligne[ligne.index('abc'):ligne.index('xyz')]
    Merci des vos indications..je progresse avec les SLICES....

Discussions similaires

  1. Problème d'ecriture arabe dans un fichier texte
    Par gateserv dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 30/08/2008, 11h44
  2. Ecriture multiple dans un fichier Excel
    Par oregos dans le forum MATLAB
    Réponses: 6
    Dernier message: 14/03/2007, 14h50
  3. ecriture lecture dans un fichier
    Par maz dans le forum C
    Réponses: 3
    Dernier message: 19/10/2006, 11h21
  4. [C#]Ecriture/Suppression dans un fichier
    Par torNAdE dans le forum Windows Forms
    Réponses: 8
    Dernier message: 11/05/2006, 09h11
  5. Ecriture simultanée dans un fichier
    Par doudou34 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 30/09/2005, 14h26

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