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 :

utiliser commande sur plusieurs .txt et tout regrouper [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut utiliser commande sur plusieurs .txt et tout regrouper
    Bonjour,
    Je suis nouveau sur ce forum donc je sais pas trop si je suis au bon endroit pour poser ma question. je m'en excuse d'avance si je me suis trompé.

    Voila j'ai réalisé une commande qui récupères les lignes que j'ai besoin dans un .txt source et je les copies dans un .txt destination. Maintenant j'aimerais pourvoir faire cette manipulation sur plusieurs .txt d'un même fichiers. Les .txt sont nommés de la façon suivante : 20151123-0.txt, 20151124-0.txt, 20151130-0.txt. ce sont des dates mais il n'y a pas tout les jours. ces fichiers sont dans un répertoire REP.
    pour faire simple réaliser la commande sur tout les .txt et rassemblé dans un .txt destination.
    J'ai fais pas mal de recherches et je n'ai pas trouvé de réponses donc je me permet de vous poser la question. Je suis assez débutant sur python donc je ne suis pas trop doué

    Je vous remercie d'avance

    Je vous met mon code de ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def filtre(source, destination):
        fs = open(source, 'r')
        fd = open(destination, 'a')
        txt = fs.readline()
     
        #les lignes a copiées dans le nouveau txt
        while txt:
            if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                fd.write(txt+'\n')
            txt = fs.readline()
        fs.close()
        fd.close()

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Avec ce code, tu récupère la liste de tes fichier .txt dans le dossier ciblé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import glob, os
    os.chdir("/mydir")
    for file in glob.glob("*.txt"):
        print(file)
    Ensuite tu stock tes fichiers dans une liste et tu fait une boucle sur cette liste de fichier et t’envoie le path de chaque fichier à ta fonction "filtre"
    normalement ça devrai remplir ton fichier de destination.

    Tu es nouveau en Python alors je t'embête pas avec ça, mais il est plus propre d'ouvrir un fichier avec un contexte manager. Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> with open('workfile', 'r') as f:
    ...     read_data = f.read()
    >>> f.closed
    True
    ça ferme proprement ici "f" à la fin des traitements ou même en cas d'erreur.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci pour cette réponse rapide. je vais regarder ce que ça donne

    De mon coté j'avais commencé à faire un une fonction pour calculer ne nombre de fichiers dans mon répertoire et ensuite faire une boucle autour.. Mais je viens de penser que ça ne marchera peut être pas...
    Voici mon code ou j'en suis au cas ou :
    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
    22
    23
    24
    import os #module pour la gestion des fichiers
     
    def filtre(source, destination, chemin_rep):
        fs = open(source, 'r')
        fd = open(destination, 'a')
        txt = fs.readline()
        repertoire = os.path.basename(chemin_rep)
     
        #Permet de calculer le nombre de fichiers dans le repertoire
        for path, dirs, repertoire in os.walk(chemin_rep): 
            for filename in repertoire:
                NB_fichier= len(repertoire)
            print(NB_fichier)
     
        i=1
        while i< NB_fichier:
     
            #les lignes a copiées dans le nouveau txt
            while txt:
                if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                    fd.write(txt+'\n')
                txt = fs.readline()
        fs.close()
        fd.close()

    J'ai du mal a comprendre le contexte manager...
    en gros il faut mettre ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def filtre(source, destination, chemin_rep):
        with open(source, 'r')as fs:
        with open(destination, 'a')as fd:
            ......
        fs.closed
        fd.closed
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def filtre(source, destination, chemin_rep):
        fs = open(source, 'r')
        fd = open(destination, 'a')
            ......
        fs.close()
        fd.close()
    == ?

    En tout cas Merci

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Il faut indenter après les lignes with et ne pas fermer les fichiers c'est python qui le fait

    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
     
    import os
     
    def filtre(source, destination, chemin_rep):
        with open(source, 'r') as fs:
            with open(destination, 'a') as fd:
                txt = fs.readline()
                repertoire = os.path.basename(chemin_rep)
                for path, dirs, repertoire in os.walk(chemin_rep): 
                    for filename in repertoire:
                        NB_fichier = len(repertoire)
                    print(NB_fichier)
     
                for i in range(NB_fichier):
                    while txt:
                        if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                            fd.write(txt+'\n')
                        txt = fs.readline()
    J'utilise des espaces pour les indentations.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Voila ou j'en suis :
    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
    import os, glob #module pour la gestion des fichiers
     
    def filtre(source_txt, destination, chemin_rep):
        with open(source_txt, 'r') as fs:
            with open(destination, 'a') as fd:
     
                liste1=[] #liste1 pour stoker les noms des fichiers txt
                os.chdir(chemin_rep)
                for file in glob.glob("*.txt"):
                    liste1.append(file)
                print (liste1)
     
                    for i in liste1:
                        txt = i.readline()
                        #les lignes a copiées dans le nouveau txt
                        while txt:
                            if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                                fd.write(txt+'\n')
                            txt = i.readline()
    Par contre j'ai un souci. J'ai du mal a voir comment appliquer mon traitement des txt aux fichiers qui sont dans ma liste1. J'ai essayé de passer avec une boucle for i in liste... mais c'est un peu le flou dans ma tète ...

    Si jamais vous avez une idée je suis preneur
    Merci beaucoup

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    help ! je suis perdu ... j'arrive pas a faire marcher mon programme..

    Voici le code:
    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
    22
    23
    import os, glob #module pour la gestion des fichiers
     
    def filtre(source_txt, destination, chemin_rep):
            with open(destination, 'a') as fd:
     
                liste1=[] #liste1 pour stoker les noms des fichiers txt
                os.chdir(chemin_rep)
                for file in glob.glob("*.txt"):
                    liste1.append(file)
                print (liste1)
                i= liste1[0]
     
                for i in liste1:
                    #pour le premier .txt de la liste1 ouvrir le fichier en indiquant le chemin ?
                    with open(chemin_rep/liste1[i],'r') as fs:
                        txt =fs.readline()
     
                        #les lignes a copiées dans le nouveau txt
                        while txt:
                            if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                                fd.write(txt+'\n')
                            txt = fs.readline()
                        i = liste1[i+1]

    Ca bug au niveau du "with open(chemin_rep/liste1[i],'r') as fs:"

    A ce niveau je pensais ouvrir le fichier correspondant entre le chemin et le txt qui est dans la liste... c'est peu être pas de cette façon qu'il faut faire..
    et ensuite a chaque fois incrémenter i pour changer de fichier dans la liste..

    Merci pour votre aide

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open(chemin_rep/liste1[i],'r') as fs:
    Tu ne peu pas concaténer chemin_rep et ton fichier comme ça.

    Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open(os.path.join(chemin_rep, liste1[i], 'r') as fs
    Je t'encourage à "googler" un maximum tes erreurs ou ce que tu veux faire et de te référer à la doc python qui est plutôt bien faite.

    Sur cette ligne : Tu itères sur les éléments de ta liste donc i = mon_fichier.txt

    Donc le code sera plutôt comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open(os.path.join(chemin_rep, i, 'r') as fs
    et supprime :

  8. #8
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    En plus ceci n'a pas de raison d'être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                liste1=[] #liste1 pour stoker les noms des fichiers txt
                os.chdir(chemin_rep)
                for file in glob.glob("*.txt"):
                    liste1.append(file)
    Juste ceci sera suffisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                liste1 =  glob.glob(chemin_rep + "/*.txt"):

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour !
    Voila mon code marche !!
    Merci beaucoup pour votre aide qui m'a été précieuse !

    je vous met mon code si ca peut aider d'autre personnes :

    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
    import os, glob #module pour la gestion des fichiers
     
    def filtre(destination_txt, chemin_rep):
            with open(destination_txt, 'a') as fd:
                    liste1=[] #liste1 pour stoker les noms des fichiers txt
                    os.chdir(chemin_rep)
                    for file in glob.glob("*.txt"):
                            liste1.append(file)      
     
                    for i in liste1:
                            #pour le premier .txt de la liste1 ouvrir le fichier en indiquant le chemin 
                            with open((os.path.join(chemin_rep, i)), 'r') as fs :
                                      txt =fs.readline()
                                      #les lignes a copiées dans le nouveau txt
                                      while txt:
                                              if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")):
                                                      fd.write(txt+'\n')
                                              txt = fs.readline()
    Bon il me reste quelques modifications à faire mais pas grand choses... le principal est fait

    Merci
    ++

    Wvxiw3

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    c'est un détail mais perso je l'écrirais comme ça la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import os, glob, re
    def filtre(destination_txt, chemin_rep):
      os.chdir(chemin_rep)
      for i in glob.glob("*.txt"):
        with open((os.path.join(chemin_rep, i)), 'r') as fs, open(destination_txt, 'a') as fd:
          for txt in fs:
            if re.match('^[0-9]', txt):
              fd.write(txt)
    • liste1 ne sert finalement à rien, glob.glob() retourne déjà une liste et on s'en sert qu'une fois
    • question de goût, je préfère utiliser une regexp pour matcher tout ce qui commence par [0-9] plutôt que d'énumérer manuellement
    • les deux open sur la même ligne, si l'un des deux échoue de toutes façons c'est pas la peine d'insister, ni en lecture, ni en écriture...


    Edit: au temps pour moi en fait VinsS te donnait les mêmes conseils plus haut, comme quoi...

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je vous remercies pour vos conseil concernant l’écriture du code.

    J'aimerais maintenant supprimer les erreurs dans mon fichier de sortie. j'ai commencé à écrire un code à la suite afin de lire chaque ligne du fichier de sortie et de supprimer les lignes qui contiennent la lettre "N" à la 13 ième place. Le tout en gardant le même fichier de sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fd2 = open(destination_txt, 'r')
                    line = fd2.readline()
                    while line :
                            maliste=line.split()
                            #if maliste[12]!= 'N':
                            if line.split(13) != 'N':
                                    cube=fd2.read(line)
                    fd2.close()
                    fd2 = open(destination_txt, 'w')
                    fd2.write(cube)
                    fd2.close()
    J'ai du mal à écrire ce code. si vous avez des idées...

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par wvxiw3 Voir le message
    lire chaque ligne du fichier de sortie et de supprimer les lignes qui contiennent la lettre "N" à la 13 ième place.
    line.split() découpe "line" suivant les "spaces".
    Pour tester la valeur du n-ième caractère de line, c'est plutôt line[n], non?
    note: et se rappeler que le premier caractère est line[0]

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

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci pour la réponse rapide.
    j'ai modifié la fonction du coup ça a l'air de marcher. Par contre j'ai le message suivant qui s'affiche :
    liste4.append(line)
    MemoryError

    Je pense que la mémoire est insuffisante pour tout sauvegarder dans la liste4 ...?

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fd2 = open(destination_txt, 'r')
                    line = fd2.readline()
                    liste4=[]
                    while line :
                            if line[12]!= 'N':
                            #if line.split(13) != 'N':
                                    liste4.append(line)
                    fd2.close()
                    fd2 = open(destination_txt, 'w')
                    fd2.write(liste4)
                    fd2.close()

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par wvxiw3 Voir le message
    Je pense que la mémoire est insuffisante pour tout sauvegarder dans la liste4 ...?
    Si vous écrivez une boucle comme "while line", il faut vous assurer que la condition pourra être fausse un jour... sinon vous allez effectuer un nombre infini d'append et... seule la limite mémoire arrêtera votre boucle avec un beau MemoryError.

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

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Du coup j'ai trouvé une solution mais c'est pas jolie jolie... Mais ça marche.. Je vais voir pour optimiser tout ça..
    Voici ma solution pour le moment (ce qui concerne la recherche des lignes qui sont défectueuses)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ####### supprimer les lignes ou il n'y a pas de coordonnées        
            with open(destination_txt+'1', 'r') as fd2:
                    with open(destination_txt, 'a') as fd3:
                            line = fd2.readline()
                            while line :
                                    if line[18]!= 'N':
     
                                            fd3.write(line)
                                    line = fd2.readline()
     
    ####### supprimer le fichier tamporaire        
            os.remove(destination_txt+'1')
    Merci encore pour votre aide
    Si jamais j'arrive à optimiser tout mon code je le mettrais à la suite de cette discussions.

    Wvxiw3

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    alalalala... je viens de me rendre compte que je peux simplement rajouter une condition simple dans mon code de base au lieu du gros machin pas beau que je viens de poster
    A ce niveau dans mon code de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")) and txt[9]!= 'N':
    pk se compliquer quand on peux faire simple...

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                            line = fd2.readline()
                            while line :
                                    if line[18]!= 'N':
     
                                            fd3.write(line)
                                    line = fd2.readline()
    c'est écrire du charabia.
    Essayez de vous relire et comparer avec la relecture de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            for line in fd2:
                                 if line[18]!= 'N':
                                       fd3.write(line)
    Le fait est que si vous bouclez c'est sur l'ensemble des lignes du fichier, ligne vide est une condition de fin de boucle. i.e. vous pourriez écrire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                            while True:
                                line = fd2.readline()
                                if not line: break
                                if line[18]!= 'N':
                                   fd3.write(line)
    je viens de me rendre compte que je peux simplement rajouter une condition simple dans mon code de base au lieu du gros machin pas beau que je viens de poster
    A ce niveau dans mon code de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if txt.strip().startswith(("0","1","2","3","4","5","6","7","8","9")) and txt[9]!= 'N':
    Votre txt.strip() supprime tous les blancs de la ligne: le caractère à la position 9 n'est plus celui que vous croyez. Et si vous n'aviez pas l'intention de faire ces suppressions, il suffit de tester txt[0]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if '0' <= txt[0] <= '9' and txt[9]!= 'N':
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if txt[0].isalnum() and txt[9]!= 'N':
    Plutôt que de passer des heures à essayer de mettre au point du code en l'écrivant n'importe comment, çà serait bien de passer un peu de temps à apprendre les constructions de bases et les "bonnes pratiques": les tutos sont là pour çà. Et ils sont faits pour vous...

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

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces remarques pertinentes, c'est vrais qu'il y a pas mal de charabias...
    Comme je le dit plus haut je suis novice en programmation et je ne suis pas développeur... Il peut m'arriver (très rarement) de programmer des choses comme celle-ci mais rien de bien compliquer et de lourd à traiter.
    Pour tout ce qui est de la façon dont je code, je fait avec les moyens du bord (c'est à dire pas grand choses) et c'est vrais que parfois lorsque l'on a la "tête dans le guidon" on code n'importe quoi.. je m'en excuse.
    Pour les tutos, merci pour le liens j’essaierais d'aller les consulter a l'avenir.

    Wvxiw3

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

Discussions similaires

  1. 1 commande sur plusieurs lignes
    Par fourchette dans le forum Scripts/Batch
    Réponses: 17
    Dernier message: 01/07/2010, 09h02
  2. Réponses: 1
    Dernier message: 27/11/2008, 11h41
  3. Réponses: 8
    Dernier message: 09/07/2008, 13h09
  4. Réponses: 4
    Dernier message: 03/12/2004, 11h18
  5. Réponses: 2
    Dernier message: 30/11/2004, 09h42

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