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 :

mise en forme de fichier Simple


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut mise en forme de fichier Simple
    Bonjour,
    Je me lance avec Python et j'ai differents petit projets en tete mais c pas evident de commencer ......

    J'ai un fichier CSV tout simple

    "I04t";"01";"0000000001";"0000000058";"TT0003B_00000001";"111111111111111";"1002-02-04-0302";;"53608";"CX/53702/2007091";"88820";"HENRY SERGE"

    J'ai besoin de remettre en forme les champs.
    Champ Input 1 = Ouput 1
    Champ Input 2 = Ouput 2
    Champ Input 5 = Ouput 3
    Champ Input 4 = Ouput 4
    7 premier caractere du Champ Input 4 = Ouput 5
    Les 7 derniers champs ne changent pas...........

    Output:
    "I04t";"01";"TT0003B_00000001";"0000000058";"TT0003B";"111111111111111";"1002-02-04-0302";"";"53608";"CX/53702/2007091";"88820";"HENRY SERGE"

    Je suis sur que c'est tres simple mais pour debuter et comprendre ce sera mieux. En attendant de trouver de quoi lire pour me former

    Merci de votre aide

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut, si tu débutes, alors ton cas est parfait pour se former à l'usage des listes.

    D'abord lire ton fichier:
    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
     
    with open ("monFichier", "r") as f:
        ll = f.readlines()
     
    # ll est une liste des lignes de ton fichier i.e. [line1, line2, line3, ...]
     
    output = []  # on crée une liste vide
     
    for line in ll:
        items = line.split(";")
        # items est une liste des éléments de ta ligne i.e. ["I04t", "01", "0000000001", ...]
        output.append(items[0:2])
        # output contient ["I04t", "01"]
        output.append(items[5])
        # output contient ["I04t", "01", "TT0003B_00000001"]
        output.append(items[4])
        # output contient ["I04t", "01", "TT0003B_00000001", "0000000058"]
        output.append(items[4][0:7])
    Tu devrais arriver à achever sans trop de difficultés je pense,
    Le lien utile:

    http://docs.python.org/library/stdtypes.html#typesseq

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Juste un petit complément concernant la solution ci-dessus: elle nécessite que le fichier csv reste aussi simple que cité.

    Dès qu'il y a des guillemets (doublés) ou un séparateur de champ ';' à l'intérieur des chaines, il faut utiliser le module csv.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import csv
     
    nfc = "monfichiercsv.csv"
    f = csv.reader(open(nfc), delimiter=';', quotechar='"')
    L = []
    for ligne in f:
        if len(ligne)==0:
            continue # pour ne pas tenir compte des lignes vides
        L.append(ligne)
     
    print L
    [['I04t', '01', '0000000001', '0000000058', 'TT0003B_00000001', '111111111111111', '1002-02-04-0302', '', '53608', 'CX/53702/2007091', '88820', 'HENRY SERGE']]
    Les traitements décrits ensuite peuvent être faits.

    Tyrtamos

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut
    Merci à vous deux je vais m'y mettre de suite !!!!!!
    Bonne semaine à vous

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut
    Bon ca marche mais j'arrive pas a récupérer le resultat dans un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     #-*- coding: cp1252 -*-
    with open("c:\\Python27\\TT0003A.txt","r") as f:
         liste = f.readlines()
     
    L = []  
     
    for line in liste:
        items = line.split(";")
        L.append(items[0] + ',' + items[1] + ',' + items[2] + ',' + items[4] + ',' + items[3] + ','
                 + items[4][0:8] + '",' + items[5] + ',' + items[6] + ',' + items[7] + ',' + items[8]
                 + ',' + items[9] + ',' + items[10] + ',' + items[11])
     
    L.write()
    L.close()

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben faudrait peut-être que tu l'ouvres ton fichier de sortie.

    De la même manière que le fichier d'entrée mais avec l'argument "w".

    Je suppose que tu as cette erreur:

    AttributeError: 'list' object has no attribute 'write'

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Par défaut
    Bonjour VinsS:

    voila le résultat final !!!!!!
    Bon je sais c'est pas la peine de m'emballer mais bon ......

    Derniere petite question pour aujourd'hui:
    Comment je peux ajouter un message à la fin du traitement ?????

    --------------------------------------------------------------------------
    Nlot = raw_input('Entrer le nom du lot à traiter sans l\'extension: ')

    with open("c:\\Python27\\" + Nlot + ".dat","r") as f:
    liste = f.readlines()
    Dest=open ("c:\\Python27\\" + Nlot + ".txt","w")

    L = []

    for line in liste:
    items = line.split(";")
    Dest.write(items[0] + ';'
    + items[1] + ';'
    + items[4] + ';'
    + items[3] + ';'
    + items[4][0:8] + '";'
    + items[5] + ';'
    + items[6] + ';'
    + items[7] + ';'
    + items[8] + ';'
    + items[9] + ';'
    + items[10] + ';'
    + items[11] )


    Dest.write
    Dest.close
    ------------------------------------------------------------------

  8. #8
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tu peux rajouter autant de write que tu veux à la suite l'un de l'autre sans oublier de rajouter les retours chariot nécessaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    with open("c:\\Python27\\" + Nlot + ".dat","r") as f:
        liste = f.readlines()
        with open ("c:\\Python27\\" + Nlot + ".txt","w") as dest:
            dest.write(liste)
            dest.write("Message1\n")
            dest.write("Message2\n")     
            etc
    Avec 'with' close() n'est plus nécessaire, le fichier est fermé dés que tu sort du bloc de code qui commence avec 'with'

    Autre chose, quand tu poste du code, mets le entre des balises code ce sera plus lisible.

Discussions similaires

  1. Mise en forme de fichiers Excel sans API
    Par Tizen dans le forum Documents
    Réponses: 2
    Dernier message: 27/09/2009, 22h56
  2. Mise en forme de fichier Word
    Par SKone dans le forum C#
    Réponses: 2
    Dernier message: 26/06/2008, 15h31
  3. [VBA]Mise en forme de fichier Ecxel aprés exportation
    Par taisherg dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/05/2007, 15h40
  4. [XML][RSS] Mise en forme dans fichier XML
    Par Mister Nono dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/01/2007, 23h58
  5. [DOM XML] Mise en forme du fichier
    Par fragmonster dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/03/2006, 12h02

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