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 :

Changer le format date de retour fonction FTP.dir()


Sujet :

Python

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut Changer le format date de retour fonction FTP.dir()
    Bonjour,

    J'utilise la fonction FTP.dir() pour lister dossiers et fichiers.

    Tout fonctionne correctement sauf que je voudrais avoir un format d'affichage différent de celui de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    07-23-18  05:27PM       <DIR>          S12_12
    07-27-18  04:00AM       <DIR>          S14_14
    08-03-18  09:30AM       <DIR>          S16_16
    07-13-18  11:14AM       <DIR>          S18_18
    07-30-18  05:06PM       <DIR>          S22_22
    08-02-18  05:55AM       <DIR>          S24_24
    08-03-18  04:02PM       <DIR>          S34_34
    11-19-13  04:02PM       <DIR>          S37_37
    07-23-18  06:13PM       <DIR>          S38_38
    Je voudrais avoir le format dd/mm/yyyy et le format des heures au format français.

    Merci par avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par Supernatural Voir le message
    Je voudrais avoir le format dd/mm/yyyy et le format des heures au format français.
    FTP.dir ne sait pas le faire par contre vous pouvez récupérer cette sortie et la formater à votre guise (ou regarder s'il n'existe pas une bibliothèque FTP qui faciliterait ce travail là car ce format de sortie là peut varier selon le serveur).

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

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Très bien, par contre j'en profite pour une autre question: comment faire pour avoir uniquement le nom des dossiers? Je sais qu'il exite 'NLST' , mais ça ne fonctionne pas lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LDS.dir(FTP_PATH, 'NLST')

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par Supernatural Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    07-23-18  05:27PM       <DIR>          S12_12
    07-27-18  04:00AM       <DIR>          S14_14
    08-03-18  09:30AM       <DIR>          S16_16
    (...)
    si on s'en tient au format que tu donnes dans ton exemple, et en guise de solution "bien, mais pas top" tu peux peut-être essayer un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cb = lambda s: print('{}/{}/20{}'.format(s[3:5], s[0:2], s[6:]))
    ftp.dir(cb)
    comme dit wiztricks, la même astuce ne marchera pas forcément avec un autre serveur FTP

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Très bien, par contre j'en profite pour une autre question: comment faire pour avoir uniquement le nom des dossiers? Je sais qu'il exite 'NLST' , mais ça ne fonctionne pas lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LDS.dir(FTP_PATH, 'NLST')
    'NSLT' est une commande FTP. Vous ne pouvez pas l'utiliser en paramètre de la fonction .dir....
    Mais vous pouvez faire directement .nslt().
    Lisez la documentation du module.

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

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Supernatural Voir le message
    comment faire pour avoir uniquement le nom des dossiers?
    Comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        lignes = ftp.nlst()
        for ligne in lignes:
            print(ligne)
    Mais la méthode mlsd apporte beaucoup plus d'informations sous forme d'un dictionnaire de propriétés pour chaque nom de fichier ou de répertoire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        lignes = ftp.mlsd()
        for ligne in lignes:
            print(ligne)
    A noter que la date (genre: "20130527140912") devrait permettre une modification de format plus facile.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    J'ai bien tenté toutes les solutions apportées ici, mais je suis toujours confronté à un problème:

    FTP.mlsd() -> ne fonctionne pas, pas de retour ni d'erreur

    FTP.dir() -> Fonctionne parfaitement, mais je ne veux que le nom du dossier

    FTP.nlst() -> ne fonctionne pas, pas de retour ni d'erreur

    donc vous comprendrez mon désarroi... je ne sais plus sur quel pied danser...

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    from configparser import ConfigParser
    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import *
    from tkinter import font
    from tkinter import Listbox
    import ftplib
     
    #Application parameters
    #FTP parametrers
    CFG_FILE = ConfigParser()
    CFG_FILE.optionxform = str
    CFG_FILE.read('ini/application.ini')
     
    APPLICATION_NAME=CFG_FILE.get('APPLICATION_PARAMETERS', 'APPLICATION_NAME')
    FTP_USER=CFG_FILE.get('SECRET', 'USER')
    FTP_PASSWORD=CFG_FILE.get('SECRET', 'PASSWORD')
    #END FTP
     
    LINE_NAME         = CFG_FILE.options('NETWORK_PARAMETERS')
    NUMBER_OF_LINE    = len(LINE_NAME)
     
    #Functions
    def FTP_GET_folder():
        print(ComboBox_linechoice.get())
        SELECTED_LINE=ComboBox_linechoice.get()
        #ftp connexion
        FTP_PARAMETERS=CFG_FILE.get('NETWORK_PARAMETERS', SELECTED_LINE)
        SERVER_NAME, PORT, FTP_PATH = FTP_PARAMETERS.split(";")
     
        print('Connexion to '+ SERVER_NAME + ' on port ' + PORT + ', path: ' + FTP_PATH)
     
        LDS = ftplib.FTP()
        LDS.connect(SERVER_NAME, int(PORT))
        LDS.login(FTP_USER, FTP_PASSWORD)
        LDS.dir(FTP_PATH)
        LDS.close()
    #End of functions
     
    #MainGUI
    MainGUI = Tk()
    MainGUI.title(APPLICATION_NAME)
    MainGUI.iconbitmap(r'ini/graph_icon.ico')
    MainGUI.geometry('1200x600')
    Mainfont = font.Font(MainGUI, family='Courier new', size='10')
     
    #LabelFrame for curve selection
    labelframe = LabelFrame(MainGUI, text="SELECTION",  width='20')
    labelframe.grid(padx=5, pady=5)
     
    #Label for ComboBox line choice
    Label_linechoice = Label(MainGUI, text="Select a line:", font=Mainfont).grid(row=0, padx=5, pady=5, sticky=W)
     
    #ComboBox line selection
    ComboBox_linechoice = ttk.Combobox(values=LINE_NAME, state="readonly", font=Mainfont)
     
    #ComboBox_linechoice.set('Select a line')
    ComboBox_linechoice.bind('<<ComboboxSelected>>', lambda e: FTP_GET_folder()) #print(ComboBox_linechoice.get()))
    ComboBox_linechoice.grid(row=1, padx=5)
     
    #Label for ListView cell choice
    Label_cellchoice = Label(MainGUI, text="Select a cell:", font=Mainfont).grid(row=2, padx=5, pady=5, sticky=W)
     
    Cell_listbox=Listbox(MainGUI)
    Cell_listbox.grid(padx=5, column=0, sticky='w')
     
    MainGUI.mainloop()
    Résultat avec:

    -LDS.dir():
    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
    03-18-13  05:23PM       <DIR>          S10_10
    07-11-18  02:53PM       <DIR>          S12_12
    07-30-18  01:07PM       <DIR>          S14_14
    08-03-18  06:12AM       <DIR>          S16_16
    08-03-18  09:50AM       <DIR>          S18_18
    08-03-18  05:50PM       <DIR>          S22_22
    08-03-18  02:08PM       <DIR>          S24_24
    07-10-18  10:23AM       <DIR>          S34_34
    07-31-18  03:23PM       <DIR>          S38_38
    08-03-18  09:18AM       <DIR>          S40_40
    08-02-18  06:41AM       <DIR>          S44_44
    08-01-18  05:41PM       <DIR>          S46_46
    06-04-18  11:22AM       <DIR>          S50_50
    08-06-18  10:57AM       <DIR>          S52_52
    08-06-18  09:11AM       <DIR>          S66_66
    LDS.nlst(FTP_PATH):

    Pas de retour (aucun message d'erreur)

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tous les serveurs ne sont pas configurés à l'identique, et il est précisé dans la doc de ftplib que mlsd n'est pas forcément supporté ("If your server supports the command, mlsd() offers a better API."). Par contre, nlst devrait l'être.

    Je te suggère d'essayer avec un serveur ftp public:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        serveurftp = "test.rebex.net"
        nom = "demo"
        mdp = "password"
        repdest = "/"
        passif = True
    Réponse de la méthode Dir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    10-27-15  04:46PM       <DIR>          pub
    04-08-14  04:09PM                  403 readme.txt
    Réponse de la méthode nlst:

    Réponse de la méthode mlsd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftplib.error_perm: 500 'MLSD ': command not understood.
    Autrement dit, le serveur répond qu'il ne comprend la requête "MLSD"

    Un autre serveur pourra donner une réponse différente. Chez mon hébergeur, les 3 méthodes donnent une réponse correcte.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Merci pour vos réponses. J'ai opté pour la méthodes ftp.nlst() qui fonctionne cette fois...

    J'ai encore une question, comment faire pour exclure les fichiers et n'avoir que les dossiers...

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    from configparser import ConfigParser
    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import *
    from tkinter import font
    from tkinter import Listbox
    import ftplib
     
    #Application parameters
    #FTP parametrers
    CFG_FILE = ConfigParser()
    CFG_FILE.optionxform = str
    CFG_FILE.read('ini/application.ini')
     
    APPLICATION_NAME=CFG_FILE.get('APPLICATION_PARAMETERS', 'APPLICATION_NAME')
    FTP_USER=CFG_FILE.get('SECRET', 'USER')
    FTP_PASSWORD=CFG_FILE.get('SECRET', 'PASSWORD')
    #END FTP
     
    LINE_NAME         = CFG_FILE.options('NETWORK_PARAMETERS')
    NUMBER_OF_LINE    = len(LINE_NAME)
     
    #Functions
    def FTP_GET_folder():
        print(ComboBox_linechoice.get())
        SELECTED_LINE=ComboBox_linechoice.get()
        #ftp connexion
        FTP_PARAMETERS=CFG_FILE.get('NETWORK_PARAMETERS', SELECTED_LINE)
        SERVER_NAME, PORT, FTP_PATH = FTP_PARAMETERS.split(";")
     
        print('Connexion to '+ SERVER_NAME + ' on port ' + PORT + ', path: ' + FTP_PATH)
     
        ftp = ftplib.FTP()
        ftp.connect(SERVER_NAME, int(PORT))
        ftp.login(FTP_USER, FTP_PASSWORD)
        #ftp.dir(FTP_PATH)
        Folders = ftp.nlst(FTP_PATH)
        Cell_listbox.delete('0','end')
     
        for folder in Folders:
            foldersplit1, foldersplit2, foldersplit3, foldersplit4 = folder.split("/")
            print(foldersplit4)
            Cell_listbox.insert(END, foldersplit4)
     
        ftp.close()
    #End of functions
     
    #MainGUI
    MainGUI = Tk()
    MainGUI.title(APPLICATION_NAME)
    MainGUI.iconbitmap(r'ini/graph_icon.ico')
    MainGUI.geometry('1200x600')
    Mainfont = font.Font(MainGUI, family='Courier new', size='10')
     
    #LabelFrame for curve selection
    labelframe = LabelFrame(MainGUI, text="SELECTION",  width='20')
    labelframe.grid(padx=5, pady=5)
     
    #Label for ComboBox line choice
    Label_linechoice = Label(MainGUI, text="Select a line:", font=Mainfont).grid(row=0, padx=5, pady=5, sticky=W)
     
    #ComboBox line selection
    ComboBox_linechoice = ttk.Combobox(values=LINE_NAME, state="readonly", font=Mainfont)
     
    #ComboBox_linechoice.set('Select a line')
    ComboBox_linechoice.bind('<<ComboboxSelected>>', lambda e: FTP_GET_folder()) #print(ComboBox_linechoice.get()))
    ComboBox_linechoice.grid(row=1, padx=5)
     
    #Label for ListView cell choice
    Label_cellchoice = Label(MainGUI, text="Select a cell:", font=Mainfont).grid(row=2, padx=5, pady=5, sticky=W)
     
    Cell_listbox=Listbox(MainGUI, font=Mainfont)
    Cell_listbox.grid(padx=5, column=0, sticky='w')
     
    MainGUI.mainloop()

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Supernatural Voir le message
    comment faire pour exclure les fichiers et n'avoir que les dossiers...
    Il est nécessaire pour ça de pouvoir tester si un nom renvoyé est un répertoire ou un fichier. Mais ce n'est pas prévu dans le protocole ftp.

    Il y a une réponse dans la FAQ du présent site: https://python.developpez.com/faq/?p...un-serveur-FTP. Pour ma part, je préfère le test par changement de chemin (cwd) qui génère une exception si c'est un fichier, puisque certains serveurs ne supportent pas "size".

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def estrepftp(ftp, chemin):
        """dit si un chemin ftp est un répertoire (True) ou non (False)
        """
        repcourant = ftp.pwd()
        try:
            ftp.cwd(chemin)
            ftp.cwd(repcourant)
            return True
        except Exception:
            return False
    Le chemin en argument est construit comme: ftp.pwd() pour le chemin courant + "/" + le nom renvoyé par nlst.

    Si c'est bien un répertoire, il ne faut pas oublier de revenir au chemin courant initial!

    Dans le "except", il faudrait mettre une exception plus précise pour être sûr qu'elle n'a pas été générée pour une autre raison (voir dans la doc de ftplib).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Je dois dire que je n'ai pas tout compris....

  12. #12
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Supernatural Voir le message
    Je dois dire que je n'ai pas tout compris....
    Dans la liste apportée par ftp.nlst(), Tu veux ne retenir que les sous-répertoires d'un répertoire FTP donné, et donc éliminer les fichiers de la liste.

    Il te faut pour ça un test qui dit "ça, c'est un répertoire" ou pas.

    D'où la petite fonction proposée.

    Qu'est-ce que tu ne comprends pas là-dedans?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Je ne sais pas comment l'intégrer dans mon code, je dois mal le faire car il me retourne toujours '/'

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    from configparser import ConfigParser
    from tkinter import *
    from tkinter import ttk
    from tkinter.ttk import *
    from tkinter import font
    from tkinter import Listbox
    import ftplib
     
    #Application parameters
    #FTP parametrers
    CFG_FILE = ConfigParser()
    CFG_FILE.optionxform = str
    CFG_FILE.read('ini/application.ini')
     
    APPLICATION_NAME=CFG_FILE.get('APPLICATION_PARAMETERS', 'APPLICATION_NAME')
    global FTP_USER, FTP_PASSWORD
    FTP_USER=CFG_FILE.get('SECRET', 'USER')
    FTP_PASSWORD=CFG_FILE.get('SECRET', 'PASSWORD')
    #END FTP
     
    LINE_NAME         = CFG_FILE.options('NETWORK_PARAMETERS')
    NUMBER_OF_LINE    = len(LINE_NAME)
     
    #Functions
    def FTP_GET_folder():
        global SELECTED_LINE
        print(ComboBox_linechoice.get())
        SELECTED_LINE=ComboBox_linechoice.get()
     
        #ftp connexion
        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.dir(FTP_PATH)
        Folders = ftp.nlst(FTP_PATH)
        Cell_listbox.delete('0',END)
     
        for folder in Folders:
     
            print(ftp.cwd(FTP_PATH))
     
            foldersplit1, foldersplit2, foldersplit3, foldersplit4 = folder.split("/")
            estrepftp(ftp, foldersplit4+'/')
            print(ftp.pwd())
            Cell_listbox.insert(END, foldersplit4)
     
        ftp.close()
     
    def FTP_GET_filesinfolder():
        print(Cell_listbox.get(Cell_listbox.curselection()))
        CELL_folder = Cell_listbox.get(Cell_listbox.curselection())
        #print(FTP_PATH+CELL_folder)
     
        #ftp connexion
        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.dir(FTP_PATH)
     
        Files = ftp.nlst(FTP_PATH+CELL_folder+'/')
     
        for files in Files:
            print(files)
     
        ftp.close()
     
    def FTP_READ_file():
        print('FTP_READ_file')
     
     
    def estrepftp(ftp, chemin):
        """dit si un chemin ftp est un répertoire (True) ou non (False)
        """
        repcourant = ftp.pwd()
        try:
            ftp.cwd(chemin)
            ftp.cwd(repcourant)
            return True
        except Exception:
            return False
     
    #End of functions
     
    #################################################################################################
    #################################################################################################
     
    #MainGUI
    MainGUI = Tk()
    MainGUI.title(APPLICATION_NAME)
    MainGUI.iconbitmap(r'ini/graph_icon.ico')
    MainGUI.geometry('1200x600')
    Mainfont = font.Font(MainGUI, family='Courier new', size='10')
     
    #LabelFrame for curve selection
    labelframe = LabelFrame(MainGUI, text="SELECTION",  width='20')
    labelframe.grid(padx=5, pady=5)
     
    #Label for ComboBox line choice
    Label_linechoice = Label(MainGUI, text="Select a line:", font=Mainfont).grid(row=0, padx=5, pady=5, sticky=W)
     
    #ComboBox line selection
    ComboBox_linechoice = ttk.Combobox(values=LINE_NAME, state="readonly", font=Mainfont)
     
    #ComboBox_linechoice.set('Select a line')
    ComboBox_linechoice.bind('<<ComboboxSelected>>', lambda e: FTP_GET_folder()) #print(ComboBox_linechoice.get()))
    ComboBox_linechoice.grid(row=1, padx=5)
     
    #Label for ListView cell choice
    Label_cellchoice = Label(MainGUI, text="Select a cell:", font=Mainfont).grid(row=2, padx=5, pady=5, sticky=W)
     
    Cell_listbox=Listbox(MainGUI, font=Mainfont)
    Cell_listbox.bind('<<ListboxSelect>>', lambda e: FTP_GET_filesinfolder())
    Cell_listbox.grid(padx=5, column=0, sticky='w')
     
    MainGUI.mainloop()

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    estrepftp est une fonction renvoyant un booléen, je pense que son intérêt se trouve dans une condition du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if estrepftp:
        print("c'est un répertoire ftp")
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Je ne sais pas comment l'intégrer dans mon code, je dois mal le faire car il me retourne toujours '/'
    Voilà un petit code qui peut t'aider (il utilise la fonction "estrepftp" que je t'ai proposée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        noms = ftp.nlst()
        repcourant = ftp.pwd()
        sousreps = []
        for nom in noms:
            chemin = repcourant + "/" + nom
            okdir = estrepftp(ftp, chemin)
            if okdir:
                sousreps.append(nom)
        print("Liste des sous-répertoires:")
        for sousrep in sousreps:
            print(sousrep)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Merci, désolé pour la réponse tardive (pas mal de taf sur le grill).

    J'ai réussi à adapter sauf que dans la boucle "for sousrep in sousreps", lors du print() j'ai les valeurs en x exemplaires (normal avec la boucle...), comment faire pour n'avoir qu'une valeur unique?

    Merci par avance.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par Supernatural Voir le message
    Merci, désolé pour la réponse tardive (pas mal de taf sur le grill).

    J'ai réussi à adapter sauf que dans la boucle "for sousrep in sousreps", lors du print() j'ai les valeurs en x exemplaires (normal avec la boucle...), comment faire pour n'avoir qu'une valeur unique?

    Merci par avance.
    Au moins 2 solutions:

    1) faire un test avant d'ajouter un élément à la liste
    2) utiliser un autre type de données (un set par exemple) qui sera unique
    Le savoir est une arme alors soyons armés

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

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 437
    Points : 109
    Points
    109
    Par défaut
    Arf, je viens de trouver la cause... Je faisais une boucle dans la boucle principale... Je ne suis pas encore habitué à la syntaxe python...

    Merci

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

Discussions similaires

  1. Changer le format date pour BDD
    Par GaMi95 dans le forum C#
    Réponses: 3
    Dernier message: 08/01/2014, 12h47
  2. [Vxi3] Changer le format "date de situation"
    Par PPN83 dans le forum Webi
    Réponses: 3
    Dernier message: 29/11/2012, 14h31
  3. Changer le format date par défaut
    Par kika10 dans le forum Administration
    Réponses: 0
    Dernier message: 07/03/2012, 13h17
  4. changer le format date dans un maskedit
    Par kroma23 dans le forum Débuter
    Réponses: 5
    Dernier message: 10/11/2011, 09h22
  5. comment changer le format date en shell ?
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 03/06/2008, 20h10

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