Bonjour
Voici une programmequi fonctionne parfaitement.Il lit un fichier plat et extrait de cilui-ci les donnée et les affiche. Rien de complexeen soit.
Ce que je cherche a savoir c'est est-ce la bonne méthode ?Est-ce la meilleur solution ?

le code dit lanceur. __init__.py

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
# coding: utf-8  
 
import string
import sys
import datetime
import os
 
from  Explorateur import * 
from  Les_Dates import * 
from  class_all import entete 
 
l_entete = entete()
# Base Application
if __name__ == '__main__':
 
    open_ok =False    
    nom_fichier_path_in = explorateur_window(".//") # Recherche via explorateur
    if os.path.isfile(nom_fichier_path_in):
 
# Ouverture du fichier destination
        nom_fichier_in = os.path.basename(nom_fichier_path_in) # Retourne le nom du fichier
        nom_fichier_path = os.path.dirname(nom_fichier_path_in) # Retourne le répertoire comple
        list_nf = os.path.split(nom_fichier_path_in) # Fractionne le chemin d'acc�s. Retourne un tuple
 
        print(nom_fichier_path_in)
 
        with open(nom_fichier_path_in, 'r') as fichier:
                        # traitement du fichier
                for ligne in fichier:
                    if(ligne[0:3] == "000"):
                        l_entete.ext_entete(ligne)
                        l_entete.__str__()

Explorateur

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
 
# coding: utf-8  
 
import tkinter 
from tkinter.filedialog import askopenfilename
 
'''Created on 21 aout 2017 
@author: jiji
'''
def explorateur_window(repertoireinit):
    """ Explorateur Windows    """
    #root = tkinter.Tk()
 
    filename = tkinter.filedialog.askopenfilename(
        initialdir=repertoireinit,
        title="Choisir votre fichier",
        filetypes=(
            ("Fichier .txt", "*.txt"),
            ("Tous type de fichier","*.*")
        )
    )
    return filename
pass
Les_Dates
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
 
# coding: utf-8 
import time
import datetime
 
def cvt_date_aaaammjj(src):
    if(src=="00000000"):
        return None
    elif(src=="000000"):
        return None
    elif(src=="        "):
        return None
    else:
        alpha_aaaa = src[0:4] 
        alpha_mm = src[4:6] 
        alpha_jj = src[6:8] 
        date_format = '%Y/%m/%d'
        my_date=alpha_aaaa+"/"+ alpha_mm + "/"+alpha_jj
        try :
            valid_date = datetime.datetime.strptime(my_date, date_format)
            valid_date_ = datetime.date(valid_date.year, valid_date.month,valid_date.day)
            return valid_date_
        except ValueError:
            print('%s Date invalide !' % my_date)
        return None
pass

class_all
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
# coding: utf-8  
 
 
#lecture du nom des feuilles
 
 
from Les_Dates import  *
 
 
class entete(object): 
    def __init__(self):
        self.Nom_element=None
        self.Type_enregistrement=None
        self.Emetteur_fichier=None
        self.Destinataire_fichier=None
        self.Date_exploitation=None
        self.Code_Norme=None
        self.Version_Norme=None
        self.Filler=None
 
    def ext_entete(self,datalu):
        print(datalu)
        self.Type_enregistrement =  datalu[0:3]         # Alimenté avec 000                                    
        self.Emetteur_fichier =     datalu[3:17]        # N°»                           
        self.Destinataire_fichier = datalu[17:31]       # Fixe »                              
        self.Date_exploitation = str( cvt_date_aammjj ( datalu[31:39]  ) )    # Format AAAAMMDD                                      
        self.Code_Norme =           datalu[39:49]       # (blancs après)               
        self.Version_Norme =        datalu[49:59]       # Exemple : 1.00                                       
        self.Filler =               datalu[59:999]      # Zone libre
    def __str__(self):
        print("Type_enregistrement :" + self.Type_enregistrement + '\n')
        print("Emetteur_fichier :" + self.Emetteur_fichier + '\n')
        print("Destinataire_fichier :" + self.Destinataire_fichier + '\n')
        print("Date_exploitation :" + self.Date_exploitation + '\n')
        print("Code_Norme :" + self.Code_Norme + '\n')
        print("Version_Norme :" + self.Version_Norme + '\n')       
        print("Filler :" + self.Filler + '\n')

des generateurs de code vont crer ceci pour la classe entete , des outils tel que BOUML

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class entete_1(object): 
    def __init__(self,Nom_element,Type_enregistrement,Emetteur_fichier,Destinataire_fichier,Date_exploitation,Code_Norme,Version_Norme,Filler):
        self.Nom_element=Nom_element
        self.Type_enregistrement=Type_enregistrement
        self.Emetteur_fichier=Emetteur_fichier
        self.Destinataire_fichier=Destinataire_fichier
        self.Date_exploitation=Date_exploitation
        self.Code_Norme=Code_Norme
        self.Version_Norme=Version_Norme
        self.Filler=Filler

mais pour autant cela ne me semble pas pertinant car il faut ajouter toutes les les informations dans la creation de l'objet .

il faudrait modifier l'appel à la classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
l_entete = entete_1(None, .... None)
avec autant de zone que de variable
ou mettre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
l_entete = entete_1(ligne[0:3], .... )
avec laconvertion de données et j trouve que cette solution n'est pas top ?



Solution N2 pour la classe entete

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
class entete(object): 
    def __init__(self,Nom_element,Type_enregistrement,Emetteur_fichier,Destinataire_fichier,Date_exploitation,Code_Norme,Version_Norme,Filler):
        self.Nom_element=Nom_element
        self.Type_enregistrement=Type_enregistrement
        self.Emetteur_fichier=Emetteur_fichier
        self.Destinataire_fichier=Destinataire_fichier
        self.Date_exploitation=Date_exploitation
        self.Code_Norme=Code_Norme
        self.Version_Norme=Version_Norme
        self.Filler=Filler
 
 
    def ext_entete(self,datalu):
        print(datalu)
        self.Type_enregistrement =  datalu[0:3]         # Alimenté avec 000                                    
        self.Emetteur_fichier =     datalu[3:17]        #                           
        self.Destinataire_fichier = datalu[17:31]       #         »                              
        self.Date_exploitation = str( cvt_date_aammjj ( datalu[31:39]  ) )    # Format AAAAMMDD                                      
        self.Code_Norme =           datalu[39:49]       # T(blancs après)               
        self.Version_Norme =        datalu[49:59]       # Exemple : 1.00                                       
        self.Filler =               datalu[59:999]      # Zone libre
    def __str__(self):
        print("Type_enregistrement :" + self.Type_enregistrement + '\n')
        print("Emetteur_fichier :" + self.Emetteur_fichier + '\n')
        print("Destinataire_fichier :" + self.Destinataire_fichier + '\n')
        print("Date_exploitation :" + self.Date_exploitation + '\n')
        print("Code_Norme :" + self.Code_Norme + '\n')
        print("Version_Norme :" + self.Version_Norme + '\n')       
        print("Filler :" + self.Filler + '\n')
dans __init__2.py

la creation de l'objet entete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
l_entete = entete(None,None,None,None,None,None,None,None)
Mais est-ce plus pertinant?