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 :

Lire un fichier txt ligne par ligne et créer un bloc rubrique


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Par défaut Lire un fichier txt ligne par ligne et créer un bloc rubrique
    Bonjour,

    j’ai un fichier txt en python. Je dois parcourir le fichier ligne par ligne et en fait à chaque ligne il y’a des numéros sous forme S10.G00.01. 001 les 3 derniers chiffres c’est des rubriques(fields), et le 01 c’est le block.

    Chaque ligne parcourue c’est une rubrique à créer, donc il faut que je détermine si c’est un nouveau bloc ou le bloc courant c’est à dire si on passe pas de 01 à 02 par exemple, il peut y avoir plusieurs rubrique dans un même bloc.

    il faut associer a l’id de block type la représentation objet que j’ai fait à partir d’un autre fichier (Excel) pour que le bloc nouvellement créé pointe vers le blocktype

    Je voudrais Faire une Traduction des lignes dans un dico ou liste en python pour pointer les data par la suite en fonction de l’ID et créer des blocs et rubriques correspondant.

    Le fichier texte ressemble à ça (je peux vous envoyer tout les fichiers si vous le souhaitez pour mieux visualiser)

    S10.G00.00.001,'EBP Paye'
    S10.G00.00.002,'EBP INFORMATIQUE'
    S10.G00.00.003,'1800076319'
    S10.G00.00.005,'02'
    S10.G00.00.006,'P18V01'
    S10.G00.00.007,'01'
    S10.G00.00.008,'01'
    S10.G00.01.001,'489897017'
    S10.G00.01.002,'00021'
    S10.G00.01.003,'BOIRON'
    S10.G00.01.004,'56 RUE DES TEINTURIERS'
    S10.G00.01.005,'45130'
    S10.G00.01.006,'MEUNG SUR LOIRE'
    S10.G00.02.001,'01'
    S10.G00.02.002,'OLIVIER André'
    S10.G00.02.004,'avalssarl@free.com'
    S10.G00.02.005,'0102030405'
    S10.G00.02.006,'0102030405'
    S20.G00.05.001,'01'
    S20.G00.05.002,'01'
    S20.G00.05.003,'11'
    S20.G00.05.004,'194792847'
    S20.G00.05.005,'01032021'
    S20.G00.05.007,'01032021'
    S20.G00.05.008,'01'
    S20.G00.05.010,'01'
    S20.G00.07.001,'Borg Grégory'
    S20.G00.07.002,'0170123456'
    S20.G00.07.003,'gregory.borg@gmail.com'
    S20.G00.07.004,'06'
    S21.G00.06.001,'123567893'
    S21.G00.06.002,'00011'
    S21.G00.06.003,'8559A'
    S21.G00.06.004,'56 RUE DES TEINTURIERS'
    S21.G00.06.005,'45130'
    S21.G00.06.006,'MEUNG SUR LOIRE'
    S21.G00.11.001,'00011'
    S21.G00.11.002,'8559A'
    S21.G00.11.003,'56 RUE DES TEINTURIERS'
    S21.G00.11.004,'45130'
    S21.G00.11.005,'MEUNG SUR LOIRE'
    S21.G00.11.008,'3'
    S21.G00.15.001,'2021/4800000548'
    S21.G00.15.002,'P1031'

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

    Vous séparez S10.G00.01.002,'00021' en ("S10.G00.01.002","'00021'") ou en "S10", "G00", "01", "002", "'00021'"...et vous essayez de profiter de ce que les S10.G00.01.002 étant de longueur fixe, on peut leur appliquer l'ordre alphabétique.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Par défaut
    S10", "G00", "01", "002", "'00021'" Plutôt de cette manière là et les éléments qui me sont important c’est 01 et 002 surtout

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    On voit bien quel est ton point de départ, mais pas trop ce que tu souhaite obtenir.
    Si je me fie au titre tu souhaites obtenir un dictionnaire dont la clé est la rubrique et la valeur la liste des blocs.

    Le plus simple est de séparer les données puisque tu as une longueur fixe pour obtenir pour chaque enregistrement une structure composée de"S10", "G00", "00", "001" et "'EBP Paye'".
    Ensuite tu peu les trier par code rubrique puis par bloc.

    Edit : wiztricks a eu la même idée pendant que j'écrivais ce texte.

    Pose un premier jet et nous pourrons t'aider à l'améliorer

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    file = open("Atelier_dsn.txt", "r")
     
    dic = {}
    list = []
     
    for line in file:
         list.append(line) 
     
    for item in list:
         item = item.split(".") 
     
    for item in list:
         print(item)
    Voilà ce que j’ai pour l’instant ....
    Je ne vois pas trop comment faire avec mon dictionnaire

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Citation Envoyé par ArthurC31 Voir le message
    Je ne vois pas trop comment faire avec mon dictionnaire
    Déjà commencez par imaginer ce qu'il devrait contenir après la lecture de quelques lignes puis vous aurez une idée de ce que vous voulez (ce qu'on ne va pas inventer à votre place).

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

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ArthurC31 Voir le message
    file = open("Atelier_dsn.txt", "r")

    dic = {}
    list = []

    for line in file:
    list.append(line)

    for item in list:
    item = item.split(".")

    for item in list:
    print(item)

    Voilà ce que j’ai pour l’instant ....
    Ouaip, ouvrir le fichier, stocker toutes ses lignes, puis splitter les lignes stockées (pour rien puisque le résultat du split n'est pas sauvegardé) puis afficher le contenu final du tableau (qui n'a donc pas vraiment changé) effectivement c'est traiter 3 fois ton fichier sans arriver très loin. Et tout ça après bien entendu avoir lu attentivement les règles du forum concernant les codes postés. Sinon créer une variable "list" c'est trop intelligent. Comme ça tu supprimes définitivement le type list() de Python qui ne sert bien évidemment à rien. Tu aurais nommé ton dictionnaire "dict" au lieu de "dic" et c'était parfait !!! Quand à "fermer le fichier" c'est comme tu le sens et visiblement tu ne le sens pas, c'est pas grave, l'esclave qui court dans ton OS le fermera pour toi.
    Accessoirement il existe readlines() qui crée un tableau contenant directement toutes les lignes d'un fichier. Ce n'est pas que ce soit utile ici (puisqu'il suffit de lire le fichier une fois et analyser la ligne lue par rapport aux datas déjà stockées) mais ça pourra te servir la prochaine fois que tu veux stocker les lignes d'un fichier dans un tableau...

    Citation Envoyé par ArthurC31 Voir le message
    Je ne vois pas trop comment faire avec mon dictionnaire
    Ben sais pas. Tu sais te servir d'un dictionnaire où tu l'as mis là pour faire joli? Tu pourrais commencer par regarder si la clef n'y est pas (alors la créer) puis ensuite lui mettre des valeurs dedans... bref programmer un algo quoi...
    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]

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Un peu de patience Sve@r, vu le nombre de messages posté par ArthurC1, se sont ces premiers sur le forum.

    ArthurC1 :
    Une petite astuce car python regorge de modules bien pratique mais il faut les connaitre.
    Pour splitter ta chaîne correctement, puisque tu as des points et une virgule, utilise le module re
    Ensuite ta rubrique sera sur le quatrième élément de la liste générée et le bloc sur le troisième (donc respectivement, indice 3 et 2).
    Comme l'a souligné Sve@ar, tu dois vérifier que la clé de ton dictionnaire existe et ajouter un bloc dans la valeur le cas échéant (cette valeur sera une liste), sinon créer l'entrée dans le dictionnaire en insérant une liste contenant le bloc.

    Ceci est très basique mais reprend ce que Sve@r et moi t'expliquons:
    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
    import re
    path='C:\\Test\\Up\\Test.txt'
    file=open(path,'r')
    dico = {}
    for line in file.readlines():
        splitted = re.split('\.|,',line)
        heading = splitted[3]
        block = splitted[2]
        if heading in dico:
            dico[heading].append(block)
        else:
            dico[heading] = [block]
     
    file.close()
     
    for key, value in dico.items():
        print(key, value)

Discussions similaires

  1. [XL-2013] Lire fichier txt ligne par ligne
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2018, 09h27
  2. Lire un fichier txt ligne par ligne
    Par storm85 dans le forum Général Python
    Réponses: 20
    Dernier message: 19/10/2010, 21h15
  3. Lire un fichier txt champ par champ
    Par than24 dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 23/02/2010, 09h59
  4. Comment lire un fichier txt ligne par ligne ?
    Par Chikh001 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/11/2007, 09h27
  5. lire un fichier .txt ligne par ligne
    Par 7awela dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/06/2007, 17h02

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