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

Réseau/Web Python Discussion :

[ftplib] Obtenir une arborescence


Sujet :

Réseau/Web Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut [ftplib] Obtenir une arborescence
    Bonjour,

    je dispose d'un serveur FTP dont je voudrais indexer le contenu (principalement par curiosité, « pour savoir faire »).

    Pour cela, je cherche à générer une liste « qui va bien » (si je n'en dis pas plus, c'est que je ne sais pas moi-même... je verrai en fonction de la manière dont ça se présente).

    Pour l'instant, j'ai regardé du côté des fonctions nlst et dir... mais ça ne me paraît par exploitable tel quel (pas d'information sur le type fichier/répertoire).
    Pour l'instant, j'ai joué avec ça :
    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
    from ftplib import *
     
    ftp = FTP('mon_adresse')
    ftp.login('toto', 'tutu', '')
     
    # Exemple avec nlst
    for i in ftp.nlst():
        print i
     
    # Exemple avec dir
    lines = []
    def filter(line):
        global lines
        lines.append(line)
     
    dir = ftp.dir("", filter)
     
    for i in lines:
        print i
     
    ftp.quit()
    En tant que cochon de base, j'ai bien pensé à faire un test pour rentrer dans chaque objet de la liste : si ça rentre, c'est un répertoire, sinon, c'est un fichier... mais j'aurais vraiment honte ! (sans compter les éventuels problèmes de permissions qui donneraient de faux résultats).

    Y a-t-il une fonction magique que j'aurais raté ?

    Merci pour vos éclairements !

    Alban

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Pour savoir si c'est un répertoire, je regarde la taille du fichier (si y'a une erreur, c'est un répertoire)
    => http://python.developpez.com/faq/?pa...PArbreDownload

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Merci

    C'est l'idée que j'avais eu initialement... mais la chose lève une exception systématiquement chez moi. Du coup, j'ai pensé que c'était la méthode qui n'était pas bonne...

    J'avais fait :
    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from ftplib import *
     
    ftp = FTP('localhost')
    ftp.login('toto', 'yoyo', '')
     
    for i in ftp.nlst():
        try:
            print i + ' ' + ftp.size(i)
        except:
            print i + ' DIR'
     
    ftp.quit()
    Et j'obtenais des choses comme ça :
    Linux DIR
    Photos DIR
    Image.jpg DIR
    Du coup, je vais plutôt regarder du côté de la configuration de mon serveur FTP !

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    ftp.size renvoit un entier donc tu as une erreur de concaténation str et int.
    Pour voir l'erreur, tu peux la récupérer avec le except

    =>

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from ftplib import *
     
    ftp = FTP('localhost')
    ftp.login('toto', 'yoyo', '')
     
    for i in ftp.nlst():
        try:
            print i + ' ' + str(ftp.size(i))
        except Exception, err:
            print err
            print i + ' DIR'
     
    ftp.quit()

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    En effet... c'était tout simplement ça ! Je me sens un peu boulet par moments... (d'autant que c'est la première chose à laquelle j'aurais pensé dans un langage où le typage est un peu plus strict). Bref !

    Ça fonctionne, je n'ai plus qu'à appeler récursivement ma fonction... et j'ai « fini »

    Merci encore !

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

Discussions similaires

  1. Obtenir une trame Ethernet
    Par Scorff dans le forum Développement
    Réponses: 15
    Dernier message: 11/09/2006, 12h22
  2. Suppression d'item dans une arborescence
    Par jonzuzu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 17h45
  3. Remonter une arborescence
    Par Gwipi dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/11/2003, 18h04
  4. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33
  5. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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