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 :

Traitement de fichier texte de longueur fixe


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut Traitement de fichier texte de longueur fixe
    #Newbie
    Bonjour,
    Débutant sous Python, j'essaye de traiter un fichier TXT mais en longueur fixe sans délimiteur.
    Mon fichier source à la format :
    VB1 19:47 07:23 1 10:15 20:25 4 2 3 5 6 7
    Les champs ont une longueur fixe.

    Le but étant de faire une app permettant de transformer se fichier en longueur fixe, en fichier TXT avec séparateur ";" pour ensuite l'importer dans un logiciel de paie.
    Je trouve bien des solutions de traitement de fichier AVEC séparateur mais pas SANS.

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 988
    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 : 4 988
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> s = "VB1 19:47 07:23 1 10:15 20:25 4 2 3 5 6 7"
    >>> s_list = s.split()
    >>> s_list
    ['VB1', '19:47', '07:23', '1', '10:15', '20:25', '4', '2', '3', '5', '6', '7']
    >>> ';'.join(s_list)
    'VB1;19:47;07:23;1;10:15;20:25;4;2;3;5;6;7'
    C'est ce résultat que vous souhaitez ?

    EDIT: Effectivement comme le dit mon voisin du dessous, il y a replace, je ne l'utilise pratiquement jamais, j'ai zappé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> s = "VB1 19:47 07:23 1 10:15 20:25 4 2 3 5 6 7"
    >>> s.replace(' ', ';')
    'VB1;19:47;07:23;1;10:15;20:25;4;2;3;5;6;7'

  3. #3
    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
    de là à faire directement un replace...

  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 BufferBob Voir le message
    de là à faire directement un replace...
    La différence entre un fichier à longueur fixe et un fichier ou le séparateur est l'espace est le nombre d'espaces qu'il y a entre les "champs".

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Re bonjour,
    Déjà merci de votre aide.
    Je me suis mal exprimé.
    Là, dans mon exemple les champs sont successifs mais il s'agit d'un export et ce serait trop simple de remplacer les espaces par ";"
    Mon fichier a plusieurs lignes, la taille des champs sont fixe et il n'y a pas de delimiteur. Ce qui fait que certe je vous ai donné le cas d'un seul enregistrement mais dans le cas de plusieurs sa ressemble plus à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VB12       12:35   1:00        5      1     34:00    12             5
    VB06       11:00              10      9      3:14           7       8
    Et du coup je ne peux pas utiliser la fonction remplace.
    PS : Je ne comprend pas, en mode redaction l'affichage de mes 2 lignes sont OK j'ai bien un décalage que je n'ai pas une fois le message validé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VB12       12:35    1:00        5      1     34:00    12             5
    VB06       11:00               10      9      3:14           7       8

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 988
    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 : 4 988
    Par défaut
    Je ne vois pas où vous voulez en venir ? Désolé, ce n'est pas très explicite (je précise en ce qui me concerne).

    @wiztricks,

    C'est vrai, cependant, j'ai l'impression que c'est formaté automatiquement, et que le nombre d'espace semble fixe lui aussi...

  7. #7
    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
    Citation Envoyé par hbtvs Voir le message
    Mon fichier a plusieurs lignes, la taille des champs sont fixe et il n'y a pas de delimiteur.
    Il faut extraire chaque champ en fonction de sa colonne de début et de sa colonne de fin, puis nettoyer les espaces.

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    pour le moment je passe par un import via access avec un masque d'import determiné. Champ1, Debut 1, longueur 4, Champ2, Debut 5, longueur.....
    J'ai donc le masque, il faudrait pouvoir le transposer pour l'import dans ce cas.

  9. #9
    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
    Citation Envoyé par hbtvs Voir le message
    pour le moment je passe par un import via access avec un masque d'import determiné. Champ1, Debut 1, longueur 4, Champ2, Debut 5, longueur.....
    J'ai donc le masque, il faudrait pouvoir le transposer pour l'import dans ce cas.
    Il devrait être possible d'accéder aux données de microsoft access avec une bibliothèque externe et récupérer le contenu d'une table sous la forme d'une liste de listes, chacune étant composé d'objets d'un type compatible avec les types Python.
    Ce qui permet d'éviter la gymnastique de la récupération d'une chaîne de caractères à découper ensuite pour...

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Il n'existe pas de commande afin d'importer un fichier en utilisant une commande du style
    Champ1=textequicommencea(1,longueurx)
    Champ2=textequicommencea(6,longueurY)
    etc... ?

  11. #11
    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
    Citation Envoyé par hbtvs Voir le message
    Il n'existe pas de commande afin d'importer un fichier en utilisant une commande du style
    Champ1=textequicommencea(1,longueurx)
    Champ2=textequicommencea(6,longueurY)
    Bien sûr que çà existe, c'est même décrit dans le bon chapitre de tout tuto.

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

  12. #12
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Merci wiztricks
    Donc nous pouvons utiliser la fonction :
    Var1=ch[0:4]
    Var2=ch[5:6]
    Var3=ch[12:3]
    etc..
    Par contre, pour traitement ligne par ligne et ecriture au fur et a mesure dans un fichier csv ?

  13. #13
    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
    Citation Envoyé par hbtvs Voir le message
    Par contre, pour traitement ligne par ligne et ecriture au fur et a mesure dans un fichier csv ?
    Si je me donne la peine de vous indiquer un tuto. c'est aussi pour que vous preniez le temps d'en survoler sinon le contenu au moins la table des matières.
    Pas difficile de trouver le chapitre manipuler les fichiers...

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

  14. #14
    Membre à l'essai
    Homme Profil pro
    formateur
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    c'est pas faux.
    Donc je regarde ça et reviendrais en cas de pbl.
    merci

  15. #15
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Non, mais je pense que tu n'as pas bien compris, tu ne peux pas y arriver ainsi sachant que rien ne délimite proprement tes valeurs, comment tu vas faire pour savoir si telle valeur est sur telle ou telle colonne ? Sans entrer dans un jeu de gymnastique ubuesque ?

    Et je pense réellement que tu peux exporter correctement ton fichier en csv, libreoffice le permet, donc, je vois pas pourquoi access ne pourrait pas le faire sachant qu'il est censé être plus complet et plus élaboré...

Discussions similaires

  1. Export fichier txt en longueur fixe
    Par manuaccess10 dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/12/2009, 10h07
  2. Problème traitement de fichiers texte
    Par darkbol1982 dans le forum VBScript
    Réponses: 7
    Dernier message: 20/02/2009, 15h05
  3. Traitement de fichier texte (txt)
    Par abdestom dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 01/09/2008, 16h14
  4. Traitement des fichiers textes
    Par Julien Dufour dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/08/2008, 15h50
  5. [VB.NET] - Traitement de fichier texte
    Par titoff60 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/01/2007, 08h27

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