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 :

Convetir un fichier en 2 selon critéres


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut Convetir un fichier en 2 selon critéres
    Bonjour, je cherche à écrire un script python pour convertir un fichier en 2 :
    Myfile.txt (start_date, article, Store)
    ---------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    20080409 1111111Store1
    20080409 2222222Store1
    20080308 3333333Store2
    20080308 4444444Store4
    20080217 5555555Store3
    20080219 6666666Store3
    pour avoir
    File1.txt (liste des Stores avec IDs attribués)
    --------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       1          Store1
       2          Store2
       3          Store3
       4          Store4
    et File2.txt
    ----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
           120080409200804151111111
           120080409200804152222222
           220080308200803143333333
           420080308200803144444444
           320080217200802235555555       
           320080219200802256666666
    c peut etre pas lisible, mais le format de sortie doit etre conforme à ça :
    (store_id, start_date, start_date+6 jours, article) = (8,8,8,8) -- justifiés à droite.
    Par exemple :
    ligne1: 120080409200804151111111 est en fait :
    1;20080409;20080415;1111111 -->
    (Store_id = 1, Start_date=20080409, Start_date+6jours = 20080415, article = 1111111)

    Je n'ai fait que remplacer , dans la ligne 1 de mon Myfile.txt -
    20080409 1111111Store1 -
    Store1 par son ID = 1 du Fichier File1.txt (que je dois obtenir)
    et ajouter une autre colonne start_date+6 jours


    Je suis assez nouveau dans python (plus habitué au shell) .. pouvez vous m'aider un peu SVP
    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    bon je suis allé un peu fort ..

    comment sélectionner des colonnes avec python? Je devrais m'en sortir avec ça .. D'habitude, j'utilise awk pour ça..

    Comment écrire dans un fichier final.txt : par ex
    col1 à col8 de Myfile.txt, puis col12 à col 16 (sur 8 caractéres)..

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Par défaut
    Ce code marche bien pour le premier fichier
    pour le deuxieme je ne trie pas les données et je les reordonne pas
    mais bon ca va te permettre de commencer tranquilement.



    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
     
    #-*- coding: utf-8 -*-
     
    #ouvrire le fichier entree
    fichier_e = open("D:\\fichier_e.txt")
     
    #lire toutes les lignes et les stocker dans un tableau
    lignes_e = fichier_e.readlines()
     
    #fermer le fichier
    fichier_e.close()
     
    #on va declarer un tableau qui contiendera (start_date, article, Store)
    tab_start_date = []
    tab_article = []
    tab_store = []
     
    #on va extraire les donnes (les separer) dans un tableau de tableau
    #de la forme tab_data[i] = [start_date, article, Store n°, n°]
    tab_data = map(lambda x:[x[0:9],x[9:16],x[16:22],x[21:-1]],  lignes_e)
     
    print tab_data[0]
    #imprimer les lignes du fichier 1
    lignes_f1 = []
    for data in tab_data:
        _ligne = data[3] + "       " + data[2] + "\n"
        lignes_f1.append(_ligne)
     
    fichier_f1 =open("D:\\fichier_1.txt", 'w')
    fichier_f1.writelines(lignes_f1)
    fichier_f1.close()
     
    #deuxieme fichier
    #(Store_id = 1, Start_date=20080409, Start_date+6jours = 20080415, article = 1111111)
     
    lignes_f2 = []
    for data in tab_data:
        _ligne = data[3] + data[0].strip() + str(int(data[0])+6)+ data[1] +"\n"
        lignes_f2.append(_ligne)
     
    fichier_f2 =open("D:\\fichier_2.txt", 'w')
    fichier_f2.writelines(lignes_f2)
    fichier_f2.close()

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    Merci beaucoup..

    Cependant, j'ai donné l'exemple store1, store2, .. mais c'est pas exactement ça (je veux dire c'est pas aussi simple d'avoir le numero par le dernier caractére de la ligne)
    En fait, le challenge est là :
    Extraire les stores (par ex: store_paris, store_strasbourg, ...), les Numéroter dans un fichier à part (1.. store_paris, 2.. store_strsbourg, ..) puis utiliser ces numéros là


    Et puis, surtout, y a le probléme de manipulation des dates : le fameux (date + 6) .. il ne s'agit pas de somme de ints bien entendu, sinon on se retrouve avec des dates : 20080337 !!

    Autre souci:
    Comment créer le fichier texte? open..., w nécessite que le fichier existe, sinon j'ai une erreur.

    Je suis en train de voir ce que je peux faire avec ça, mais t'as riason ça m'aide beaucoup..

    Toutefois, toute aide est appréciable surtout au niveau des bibilothéques à utiliser, ou les fonctions prédéfinies...

    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    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
    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
     
    #-*- coding: utf-8 -*-
     
    #ouvrire le fichier entree
    fichier_e = open("D:\\fichier_e.txt")
     
    #lire toutes les lignes et les stocker dans un tableau
    lignes_e = fichier_e.readlines()
     
    #fermer le fichier
    fichier_e.close()
     
    #on va extraire les donnes (les separer) dans un tableau de tableau
    #de la forme tab_data[i] = [start_date, article, Store n°, n°]
    tab_data = map(lambda x:[x[0:9],x[9:16],x[16:60]],  lignes_e)
     
    #print tab_data[0]
    #imprimer les lignes du fichier 1
    lignes_f1 = []
    for data in tab_data:
        #_ligne = data[2] + "\n"
        _ligne = data[2]
        lignes_f1.append(_ligne)
     
    #enlever les doublons pour créer la liste des stores
    lignes_f1_temp = {}.fromkeys(lignes_f1)
    lignes_f1_wo_duplicates = lignes_f1_temp.keys()
     
    lignes_f1_ = sorted(lignes_f1_wo_duplicates)
     
    #Donner des numéros aux stores
    i=0
    final_lignes_f1 = []
    while i < len(lignes_f1_):
        _ligne_f1 = "%4s" % str(i+1) + "%40s" % str(lignes_f1_[i])
        final_lignes_f1.append(_ligne_f1)
        i = i+1
     
    fichier_f1 =open("D:\\fichier_1.txt", 'w')
    fichier_f1.writelines(final_lignes_f1)
    fichier_f1.close()
     
    #deuxieme fichier
    #(Store_id = 1, Start_date=20080409, Start_date+6jours = 20080415, article = 1111111)
     
    lignes_f2 = []
    for data in tab_data:
        _ligne = data[0] + str(int(data[0])+6)+ data[1] +"\n"
        lignes_f2.append(_ligne)
     
    fichier_f2 =open("D:\\fichier_2.txt", 'w')
    fichier_f2.writelines(lignes_f2)
    fichier_f2.close()
    au final, j'obtiens :
    le fichier_1 exactement comme je veux..(numero .. store)

    Par contre, le fichier_2 lui manque le numéro correspondant du store dans la nouvelle liste.. je ne sais pas comment faire ceci


    merci

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    j'ai aussi pu résoudre le problème des dates :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for data in tab_data:
        std=data[0]
        std_convert = datetime.date(int(std[0:4]), int(std[4:6]), int(std[6:8]))
        week = datetime.timedelta(days=6)
        edd_convert = std_convert + week
        edd=str(edd_convert)[0:4] + str(edd_convert)[5:7] + str(edd_convert)[8:10]
        _ligne = std.strip() + edd.strip() + data[1] +"\n"
        lignes_f2.append(_ligne)
    Il me reste donc que le probléme de récupérer le numéro du store depuis un autre fichier.
    J'apprécierai de l'aide sur ce coup là car il s'agit aussi d'un challenge au niveau alogorithmique

    merci beacoup

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

Discussions similaires

  1. [XL-2013] Macro suppression de lignes selon critère - fichier volumineux
    Par demeter dans le forum Excel
    Réponses: 9
    Dernier message: 13/06/2014, 18h28
  2. [PHP 5.4] Exploser un fichier Word en tableau selon critères
    Par tigunn dans le forum Langage
    Réponses: 1
    Dernier message: 23/05/2014, 11h13
  3. [XL-2007] Macro pour création de fichier selon critères
    Par ExcelLiod dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/01/2014, 11h17
  4. Réponses: 1
    Dernier message: 26/10/2009, 15h05
  5. Réponses: 2
    Dernier message: 19/04/2007, 13h54

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