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 :

Lister fichiers par FTP pour les stocker dans une Listview idem explorateur Windows [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut Lister fichiers par FTP pour les stocker dans une Listview idem explorateur Windows
    Bonjour,

    depuis quelques temps je galère pour récupérer des fichiers d'un serveur par ftp.

    Je souhaite récupérer les fichiers contenu dans un dossier (avec des filtres bien sûr) pour les mettre dans une ListView avec un style explorateur Windows (Nom | Modifié le | Type | Taille).

    J'ai essayé les fonctions ftp.dir(), ftp.nlst(), etc... mais chacune me pose soucis à un certains stade...

    Ci-joint mon code, merci par avance pour votre aide.

    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
     
    def FTP_GET_FilesIntoFolder(self, event):
            try:
                index = self.Cell_listbox.curselection()[0]
                Cell_folder = self.Cell_listbox.get(index)
     
                for i in self.tree.get_children():
                    self.tree.delete(i)
     
                FTP_PARAMETERS              = CFG_FILE.get('NETWORK_PARAMETERS', SELECTED_LINE)
                SERVER_NAME, PORT, FTP_PATH = FTP_PARAMETERS.split(";")
                ftp                         = ftplib.FTP()
                ftp.connect(SERVER_NAME, int(PORT))
                ftp.login(FTP_USER, FTP_PASSWORD)
     
                QUELLE METHODE?
     
                #MyList                      = ftp.nlst(FTP_PATH+Cell_folder)
                #MyList                      = ftp.dir(FTP_PATH+Cell_folder)
     
                iFile                       = 0
                FilteredFiles               = []
     
                for file in MyList:
                    if file.split('.')[-1]=='txt':
                        continue
                    elif file.split('.')[-1]=='io':
                        continue
                    else:
                        FilteredFiles.append(file)
     
                        self.tree.insert('', 'end', text=file, values=('date', 'time'))
     
                        iFile+=1
                    print(file)
                #if iFile==1:
                    #print('One file found')            
                #elif iFile>1:
                    #print(iFile, 'files found')
                #else:
                    #print('No file found')
     
                return True
            except Exception:
                return False

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

    La question serait plutôt de savoir comment récupérer via FTP des attributs tels que date de modification, taille de vos fichiers, ... Et le titre de votre message "Lister fichiers par FTP pour les stocker dans une Listview idem explorateur Windows" n'a qu'un rapport lointain avec le problème que vous cherchez à résoudre.
    D'autant que votre serveur FTP sait peut être retourner ces informations sous certaines conditions pour autant qu'il implémente les commandes FTP qui vont bien. Ce qui veut dire qu'il faut déjà vérifier son comportement avec un client FTP standard avant d'essayer d'automatiser cela par programme.
    Ce qui devrait déjà vous donner quelques pistes et mots clefs pour faire des recherches sur Internet pour trouver de la documentation, des exemples et arriver à écrire un premier code plus ou moins fonctionnel.
    En tous cas, c'est un travail préalable que pas grand monde fera à votre place (puisqu'on ne connaît même pas le serveur ni sa configuration).

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

  3. #3
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Je suis bien d'accord, mais le problème est que je n'ai absolument pas accès aux configuration des serveurs, d'autant plus que la personne qui s'en occupe a fait ça comme un 'cochon', ports configurés en 21 ou 22 etc... (la critique est facile je vous l'accorde).

    Je veux retranscrire une application déjà développé sous AutoIt en python.

    Sous AutoIt je n'ai eu absolument aucun soucis pour récupérer les fichiers avec leurs attributs. Mais c'est plus difficile avec Python...

    Ci on regarde mon code, la fonction ftp.dir(FTP_PATH+Cell_folder) correspondrait le plus à mes attentes avec un resultat comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    08-13-18  12:59PM                 6112 5b71804e_0_57081_NOK.1
    08-13-18  12:59PM                 1651 5b71804e_ProcessLog_0.txt
    08-13-18  01:55PM                 6099 5b718d98_0_57082_NOK.1
    08-13-18  01:55PM                 1651 5b718d98_ProcessLog_0.txt
    08-16-18  12:13PM                 7871 5b756a03_0_4540_NOK.1
    08-16-18  12:13PM                 2349 5b756a03_ProcessLog_0.txt
    08-20-18  09:58AM                 6216 5b7a8fe7_0_11190_NOK.1
    Maintenant comment mettre l'heure au format français dans un premier temps?

    Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Maintenant comment mettre l'heure au format français dans un premier temps?
    Si vous ne pouvez rien faire côté serveur, vous pouvez découper la chaîne de caractères pour récupérer les champs intéressants et les présenter sous un autre format. Si vous trouvez cela trop laborieux, il faut (apprendre à) utiliser les fonctions strftime et strptime du module datetime.

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

  5. #5
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Merci, je vais regarder ça

  6. #6
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Du coup je me retrouve le bec dans l'eau avec la fonction ftp.dir() car elle me renvoie None, je ne peux pas la stocker dans un array pour la retravailler.... comment faire?

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

    Citation Envoyé par Supernatural Voir le message
    comment faire?
    Sauf à rediriger stdout, vous pourriez ouvrir la documentation du client ftp pour voir si ce qu'ils proposent à la place est utilisable.

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

  8. #8
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    J'ai trouvé une solution bancale, mais qui fonctionne....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ftp                         = ftplib.FTP()
                ftp.connect(SERVER_NAME, int(PORT))
                ftp.login(FTP_USER, FTP_PASSWORD)
     
                ftp.cwd(FTP_PATH+Cell_folder)
                files = []
                ftp.retrlines('LIST', files.append)

  9. #9
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Alors j'ai de bonnes nouvelles ^^. J'avance à petits pas. Maintenant il ne me reste plus que le format date qui me pose soucis.

    J'utilise la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTimeftp = ftp.sendcmd('MDTM ' + file)
    pour récupérer la date et heure du fichier. Mon soucis et que je dois redécouper la chaîne de caractère pour l'afficher correctement et ajouter 2 heures (à cause de l'heure d'été/hiver).

    Mon retour de fonction: Ci-joint mon code:

    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
    def FTP_GET_FilesIntoFolder(self, event):
            try:
                index = self.Cell_listbox.curselection()[0]
                Cell_folder = self.Cell_listbox.get(index)
     
                for i in self.tree.get_children():
                    self.tree.delete(i)
     
                FTP_PARAMETERS              = CFG_FILE.get('NETWORK_PARAMETERS', SELECTED_LINE)
                SERVER_NAME, PORT, FTP_PATH = FTP_PARAMETERS.split(";")
                ftp                         = ftplib.FTP()
                ftp.connect(SERVER_NAME, int(PORT))
                ftp.login(FTP_USER, FTP_PASSWORD)
     
                ftp.cwd(FTP_PATH+Cell_folder)
                files = []
                iFile                       = 0
                FilteredFiles               = []
                #ftp.retrlines('LIST', files.append) 
                files=ftp.nlst()
     
                #print(files)
     
                for file in files:
                    DateTimeftp = ftp.sendcmd('MDTM' + file)
                    #ModifiedTimeFtp = datetime.strptime(DateTimeftp[4:], "%Y%m%d%H%M%S").strftime("%d %b %Y %H:%M:%S")
                    print(DateTimeftp)
     
                    if file.split('.')[-1]=='txt':
                        continue
                    elif file.split('.')[-1]=='io':
                        continue
                    else:
                        FilteredFiles.append(file)
     
                for i in FilteredFiles:
                    self.tree.insert('', 'end', text=i, values=('date', ftp.size(i), FTP_PATH+Cell_folder+'/'+i))
                    #self.tree.insert('', 'end', text=FilteredFiles, values=('date', 'time'))
     
                        #iFile+=1
                    #print(file)
                #if iFile==1:
                    #print('One file found')            
                #elif iFile>1:
                    #print(iFile, 'files found')
                #else:
                    #print('No file found')
     
                return True
            except Exception:
                return False
    Merci par avance

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

    Citation Envoyé par Supernatural Voir le message
    Mon soucis et que je dois redécouper la chaîne de caractère pour l'afficher correctement et ajouter 2 heures (à cause de l'heure d'été/hiver).

    Mon retour de fonction:
    C'est quoi le soucis? Découper la chaîne en utilisant des "slices" est assez facile en tous cas, ouvrir votre tuto. préféré pour revoir un peu tout çà serait le premier pas.

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

  11. #11
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in FilteredFiles:
                    DateTimeftp = ftp.sendcmd('MDTM '+i)
                    ModifiedTimeFtp = datetime.strptime(DateTimeftp[4:], "%Y%m%d%H%M%S").strftime("%Y/%m/%d %H:%M:%S")
                    self.tree.insert('', 'end', text=i, values=(ModifiedTimeFtp, ftp.size(i), FTP_PATH+Cell_folder+'/'+i))
    C'est bon à 90%, reste juste le problème d'heure été/hiver...

    J'ai déclaré la timezone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tz = pytz.timezone('Europe/Paris')
    mais après je ne sais pas trop comment l'appliquer

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

    Citation Envoyé par Supernatural Voir le message
    mais après je ne sais pas trop comment l'appliquer
    C'est une opération à ajouter entre strptime et strftime ou à préciser dans le strptime.

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

  13. #13
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Je reviens à la charge... J'ai trouvé un exemple sur le net... mais je n'arrive pas à l'adapter, j'ai les yeux qui se croisent à force...

    J'ai fait ça mais ça ne me retourne pas tout à ait ce que je veux...

    Exemple:
    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
    from datetime import datetime
    from pytz import timezone
     
    fmt = "%Y-%m-%d %H:%M:%S %Z%z"
     
    # Current time in UTC
    now_utc = datetime.now(timezone('UTC'))
    print now_utc.strftime(fmt)
     
    # Convert to US/Pacific time zone
    now_pacific = now_utc.astimezone(timezone('US/Pacific'))
    print now_pacific.strftime(fmt)
     
    # Convert to Europe/Berlin time zone
    now_berlin = now_pacific.astimezone(timezone('Europe/Berlin'))
    print now_berlin.strftime(fmt)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in FilteredFiles:
                    DateTimeftp = ftp.sendcmd('MDTM '+i)
                    ModifiedTimeFtp = datetime.strptime(DateTimeftp[4:], "%Y%m%d%H%M%S")
                    toto = ModifiedTimeFtp.astimezone(timezone('Europe/Berlin'))
                    print(toto)
    Le retour de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2018-10-05 11:28:02+02:00
    au lieu de

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

    Citation Envoyé par Supernatural Voir le message
    J'ai fait ça mais ça ne me retourne pas tout à ait ce que je veux...
    Déjà si vous voulez convertir un datetime UTC au format "%Y%m%d%H%M%S" en datetime local avec un autre format, vous commencez par pensez à une fonction qui isole cet aspect là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def convert(utc_dt):
          ...
          return local_dt
    C'est important car çà va vous permettre de tester sur un certain nombre de cas que çà le fait (et éventuellement de poster un code qui permettra de reproduire le soucis rencontré).

    Citation Envoyé par Supernatural Voir le message
    Le retour de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2018-10-05 11:28:02+02:00
    au lieu de
    Vous avez deux solutions:
    • aller chercher dans la documentation de pytz si on peut dire à la fonction/méthode astimezone de ne pas retourner les informations sur la timezone ou s'il n'y a pas une méthode plus adaptée,
    • supprimer les derniers caractères de la chaîne actuellement retournée.


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

  15. #15
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Là j'aurai vraiment besoin d'un coup de pouce car je tourne en rond...

    Ca c'est OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import datetime as dt  
    import pytz
     
    gmt = pytz.timezone('GMT')  
    gmt = dt.datetime.now(gmt)
     
    local_dt = pytz.timezone('Europe/Paris')  
    local_dt = gmt.astimezone(local_dt)
     
    print('GMT         :', gmt.strftime("%Y-%m-%d %H:%M:%S"))  
    print('Europe/Paris:', local_dt.strftime("%Y-%m-%d %H:%M:%S"))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in FilteredFiles:
                    DateTimeftp = ftp.sendcmd('MDTM '+i)
                    utc_dt = DateTimeftp[4:]
                    self.DT_convertion(utc_dt)
                    print(self.DT_convertion(utc_dt))
    et ma fonction pour convertir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def DT_convertion(self, utc_dt):
           utc_dt   = datetime.strptime(utc_dt, "%Y%m%d%H%M%S").strftime("%Y-%m-%d %H:%M:%S.%f")
            print(utc_dt)
            local_dt = utc_dt.replace(tzinfo=pytz.UTC)
            local_dt = local_dt.astimezone(pytz.timezone("Europe/Paris"))
            print(local_dt)

  16. #16
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    La je pédale dans la semoule, je pense que ça doit-être à cause de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utc_dt   = datetime.strptime(utc_dt, "%Y%m%d%H%M%S").strftime("%Y-%m-%d %H:%M:%S.%f")
    Question personnelle: Pourquoi lorsque je mappe mon serveur, mes fichiers ont la bonne date, alors que lorsque je les listes en ftp, ils ont 2 heures de moins?

  17. #17
    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,

    J'avais déjà remarqué ça. D'après ce que j'ai lu sur le sujet, la date et l'heure renvoyées par le protocole ftp (j'utilise la requête "MDTM" de ce protocole) est toujours le temps universel "UTC" (ex-GMT).
    Alors, quand on est en France, on obtient aujourd'hui le temps local en ajoutant 2 heures: +1 heure pour l'écart de fuseau horaire, et +1 heure pour l'heure d'été. Ceci puisque le soleil vient de l'est: il est donc en France avant d'être à Greenwich!

    Mais les outils "clients FTP" ne sont pas toujours clairs sur les corrections qu'ils font ou pas. Il y a même des bugs répertoriés sur le sujet. A noter que sur Filezilla, on peut introduire la correction qu'on veut pour que l'heure affichée soit celle qu'on veut.

  18. #18
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Oui mais comment corriger ça? C'est une horreur... Ca fait deux jour que je suis là dessus et ù*$^:;ù^$!!!!

  19. #19
    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,

    Voilà une fonction qui extrait le temps de la dernière modif du fichier ftp avec une éventuelle correction pour avoir l'heure locale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def datemodifftp(ftp, fichierftp, hlocal=0):
        """retourne la date et heure de la dernière modification du fichier
           en format iso
           si hlocal!=0, correction est faite pour avoir l'heure locale
        """
        date = ftp.sendcmd('MDTM ' + fichierftp)[4:]
        a, m, j = int(date[:4]), int(date[4:6]), int(date[6:8])
        h, mn, s = int(date[8:10]), int(date[10:12]), int(date[12:])
        dt = datetime(a, m, j, h, mn, s)
        dt += timedelta(hours=hlocal)
        return dt.isoformat(sep='_')
    La requête "ftp.sendcmd('MDTM ' + fichierftp)[4:]" renvoie une chaine comme "20181009161639", dont on déduit par découpage toutes les données de la date.

    Avec une correction comme hlocal=2, on obtient comme résultat: "2018-10-09_18:16:39"

    Il est important de faire une correction portant sur l'ensemble de la date, puisqu'une modification d'heure peut faire changer le jour, le mois et même l'année!

    Pour plus d'infos sur les calculs de dates: voir la doc du module datetime => https://docs.python.org/3/library/da...odule-datetime.

  20. #20
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 480
    Par défaut
    Ok, merci.

    Je n'ai pas pensé au découpage de la chaîne comme tu l'as fais. Par contre j'ai mis la valeur de hHours dans un fichier texte comme ça il est modifiable sans avoir à recompiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def DT_convertion(self, ftp, i):
            utc_dt = ftp.sendcmd('MDTM '+i)[4:]
            a, m, j = int(utc_dt[:4]), int(utc_dt[4:6]), int(utc_dt[6:8])
            h, mn, s = int(utc_dt[8:10]), int(utc_dt[10:12]), int(utc_dt[12:])
            local_dt = datetime(a, m, j, h, mn, s)
            local_dt =local_dt+timedelta(hours=int(DELTA_TIME))
            return local_dt.isoformat(sep=' ')
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELTA_TIME           = CFG_FILE.get('FTP_PARAMETERS', 'DeltaTime')
    merci à tout le monde pour votre aide.

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

Discussions similaires

  1. [Python 3.X] Lire un fichier pour les stocker dans un tableau multidimensionel
    Par Supernatural dans le forum Général Python
    Réponses: 11
    Dernier message: 20/11/2018, 13h30
  2. Réponses: 3
    Dernier message: 19/04/2017, 17h36
  3. récupération des données pour les afficher dans une ListView
    Par khoukha1 dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 14/06/2012, 14h59
  4. Réponses: 4
    Dernier message: 08/04/2011, 09h44
  5. Réponses: 0
    Dernier message: 02/04/2011, 12h57

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