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 :

Trier un fichier txt contenant des listes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut Trier un fichier txt contenant des listes
    Bonsoir,

    je viens de créer une fonction qui
    1) demande d'entrer 6 données afin d'y former une liste
    2) ajoute cette liste dans un fichier d'entré de données
    3) sauvegarde la 3eme valeur de ligne afin d'y créer un fichier txt avec ce nom (si le fichier en question n'existe pas déjà)
    4) supprime la 3ème, 4ème et 5ème valeure de la liste
    5) joint les élément restants de la liste en une nouvelle liste et ajoute cette nouvelle liste dans le fichier créé à partir de l'element sauvegardé


    En admetant que je rajoute plusieurs liste dans le fichier d'entré ou dans les différents fichier créé, je voudrais que ces listes soient triées en fonction de la date (élément 1 de la liste) et de l'heure (élément 2 de la liste)
    date est au format jj/mm/aaaa
    heure est au format hh/mm


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    def ajout_listes(fichie_source):
        # Demande à l'utilisateur de rentrer la date, l'heure, l'importance, l'événement, act, prévue et précédent
        date = input("Entrez la date (jj/mm/aaaa) : ")
        heure = input("Entrez l'heure (hh:mm) : ")
        devise = input("Entrez la devise : ")
        importance = input("Entrez l'importance (1 à 3) : ")
        evenement = input("Entrez l'événement : ")
        act = input("Entrez la valeure actuelle : ")
        prevue = input("Entrez la valeure prévue : ")
        precedent = input("Entrez la valeure précédente : ")
     
        # Création de la liste à partir des données entrées par l'utilisateur
        new_list = [date, heure, devise, importance, evenement, act, prevue, precedent]
        ligne = '   '.join(new_list)
        with open(fichie_source, 'a') as f_s:
            # Écrivez la nouvelle ligne dans le fichier
            f_s.write(ligne + '\n')
     
        # Recuperer la lettre correspondant au fichier
        even = new_list[4]
     
        # Enlever le champs "devise", "importance", et "evenement" de la liste
        del new_list[2]
        del new_list[2]
        del new_list[2]
     
        # Réassemblez la ligne en utilisant join
        new_line = ' '.join(new_list)
     
        # Ouvrez le fichier 'evenement' en mode 'a'
        with open(even + '.txt', 'a') as f_e:
            # Écrivez la nouvelle ligne dans le fichier
            f_e.write(new_line + '\n')
     
     
    ajout_listes('essai ajouter listes.txt')
    le fichier 'essai ajouter listes.txt' contient

    15/02/2023 10:30 jpy 3 ploi 15 12 14
    14/05/2024 20:30 jpy 2 ploi 15 16 14
    25/06/2024 20:30 jpy 3 ploi 20 21 23
    01/01/2025 23:10 jpy 3 ploi 20 30 40
    20/04/2024 20:15 jpy 2 ploi 14 25 36
    02/03/2026 20:10 jpy 3 ploi 20 30 10
    02/02/2026 20:30 jpy 2 ploi 15 25 35
    04/04/2027 20:35 jpy 1 ploi 51 52 53
    03/03/2023 20:30 jpy 2 ploi 25 14 14

    J'ai beau chercher pendant des heures, je n'arrive pas à faire en sorte que les listes sortent triées an fonction de la date et de l'heure les plus récents en haut.
    Même avec ce bout de code à la fin ça ne donne rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        # Lecture du contenu du fichier 'even'
        with open(even + '.txt', 'r') as f_e:
            lines = f_e.readlines()
        # trier les lignes en fonction de la date et de l'heure
        lines = sorted(lines, key=lambda x: datetime.strptime(x.split()[0] + ' ' + x.split()[1], '%d/%m/%Y %H:%M'))
        # Réécrire les lignes triées dans le fichier
        with open(even + '.txt', 'w') as f_e:
            f_e.writelines(lines)
    merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut !
    Easy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import time
    string1  = "15/02/2023 10:30 jpy 3 ploi 15 12 14"
    date1 = time.strptime(string1[:16], "%d/%m/%Y %H:%M")
     
    string2  = "15/02/2023 10:31 jpy 3 ploi 15 12 14"
    date2 = time.strptime(string2[:16], "%d/%m/%Y %H:%M")
     
    print(sorted((date2, date1)))
    Lien : https://docs.python.org/fr/3/library...#time.strptime

    NB : Pour trier ta liste : sorted(TA_LISTE, key=lambda x: time.strptime(x[:16], "%d/%m/%Y %H:%M")).
    Dernière modification par Invité ; 13/01/2023 à 08h15.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 871
    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 871
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par djobadi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # Enlever le champs "devise", "importance", et "evenement" de la liste
    del new_list[2]
    del new_list[2]
    del new_list[2]
    Dangereux ça. Ok t'as bien pigé que les indices se décalent avec chaque "del" mais faut le relire et imaginons que ton code évolue et que le champ "devise" ne soit plus à supprimer...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Enlever le champs "devise", "importance", et "evenement" de la liste
    del new_list[2:5]

    Ou alors
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Enlever le champs "devise", "importance", et "evenement" de la liste
    new_list=new_list[0:2] + new_list[5:]

    Citation Envoyé par djobadi Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ligne = '   '.join(new_list)
    with open(fichie_source, 'a') as f_s:
    	# Écrivez la nouvelle ligne dans le fichier
    	f_s.write(ligne + '\n')
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(fichie_source, 'a') as f_s:
    	# Écrivez la nouvelle ligne dans le fichier
    	print('   '.join(new_list), file=f_s)
    Et tu n'es pas obligé d'ouvrir ton fichier 500 fois quand tu veux y écrire 500 lignes...
    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]

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

    Citation Envoyé par djobadi Voir le message
    Même avec ce bout de code à la fin ça ne donne rien.
    Un print('\n'.join(lines)) à la sortie du lines = sorted(lines,...) devrait afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    15/02/2023 10:30 jpy 3 ploi 15 12 14
    03/03/2023 20:30 jpy 2 ploi 25 14 14
    20/04/2024 20:15 jpy 2 ploi 14 25 36
    14/05/2024 20:30 jpy 2 ploi 15 16 14
    25/06/2024 20:30 jpy 3 ploi 20 21 23
    01/01/2025 23:10 jpy 3 ploi 20 30 40
    02/02/2026 20:30 jpy 2 ploi 15 25 35
    02/03/2026 20:10 jpy 3 ploi 20 30 10
    04/04/2027 20:35 jpy 1 ploi 51 52 53
    Ce qui n'est pas si mal...
    Après comme writelines suppose que la fin de ligne est présente dans les chaines de caractères qu'on lui passe, ça va faire un gros tas.
    Apprenez à diagnostiquer ce qui ne va pas en le séparant de ce qui fonctionne (plutôt que de tout foutre à la poubelle et repartir sur autre chose).


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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut
    Merci à tous pour vos réponses, elles m'ont beaucoup aider.

    Voici mon code final

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
    import os
    from typing import Dict, List
    from datetime import datetime
     
     
    def ajout_listes(fichie_source):
        data = {}
        # Demande à l'utilisateur de rentrer la date, l'heure, l'importance, l'événement, act, prévue et précédent
        date = input("Entrez la date (jj/mm/aaaa) : ")
        heure = input("Entrez l'heure (hh:mm) : ")
        devise = input("Entrez la devise : ")
        importance = input("Entrez l'importance (1 à 3) : ")
        evenement = input("Entrez l'événement : ")
        act = input("Entrez la valeure actuelle : ")
        prevue = input("Entrez la valeure prévue : ")
        precedent = input("Entrez la valeure précédente : ")
     
        # Création de la liste à partir des données entrées par l'utilisateur
        new_list = [date, heure, devise, importance, evenement, act, prevue, precedent]
        ligne = '   '.join(new_list)
     
        # ouvrez le fichier source en mode 'a'
        with open(fichie_source, 'a') as f_s:
            # Écrivez la nouvelle ligne dans le fichier
            f_s.write(ligne + '\n')
     
        # Lecture du contenu du fichier source
        with open(fichie_source, 'r') as f_s:
            rlines = f_s.readlines()
        # trier les lignes en fonction de la date et de l'heure
        rlines = sorted(rlines, key=lambda x: datetime.strptime(x.split()[0] + ' ' + x.split()[1], '%d/%m/%Y %H:%M'), reverse=True)
        # Réécrire les lignes triées dans le fichier
        with open(fichie_source, 'w') as f_e:
            f_e.writelines(rlines)
     
        # Recuperer la lettre correspondant au fichier
        even = new_list[4]
     
        # Enlever le champs "devise", "importance", et "evenement" de la liste
        del new_list[2:5]
     
        # Réassemblez la ligne en utilisant join
        new_line = ' '.join(new_list)
     
        # Ouvrez le fichier 'evenement' en mode 'a'
        with open(even + '.txt', 'a') as f_e:
            # Écrivez la nouvelle ligne dans le fichier
            f_e.write(new_line + '\n')
     
        # Lecture du contenu du fichier 'even'
        with open(even + '.txt', 'r') as f_e:
            lines = f_e.readlines()
        # trier les lignes en fonction de la date et de l'heure
        lines = sorted(lines, key=lambda x: datetime.strptime(x.split()[0] + ' ' + x.split()[1], '%d/%m/%Y %H:%M'), reverse=True)
        # Réécrire les lignes triées dans le fichier
        with open(even + '.txt', 'w') as f_e:
            f_e.writelines(lines)
     
     
    ajout_listes('essai ajouter listes.txt')

Discussions similaires

  1. Récupérer des fichiers TXT dans mes listes
    Par abcabc19 dans le forum Langage
    Réponses: 4
    Dernier message: 15/03/2016, 14h59
  2. Liste déroulante de fichiers (.txt) dans des répertoires spécifiques
    Par iliaseyah dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2015, 16h23
  3. [AC-2010] Problème d'import fichier txt contenant des caractères spéciaux
    Par stsym dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/03/2014, 06h08
  4. Réponses: 1
    Dernier message: 23/03/2013, 14h26
  5. Lire un fichier txt contenant des sauts de ligne
    Par lodan dans le forum Langage
    Réponses: 14
    Dernier message: 19/09/2011, 11h17

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