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 :

Problème changement de répertoire avec ftplib


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Problème changement de répertoire avec ftplib
    Bonjour,
    Je suis en train décrire un petit client FTP mais malheureusement je suis bloquer sur une boucle :/

    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        t.MAJ()
      File "C:\Users\Norian\Dropbox\Spangler\Code source\FTP.py", line 68, in MAJ
        self.ftp.cwd(dossier + "//")
      File "C:\Python27\lib\ftplib.py", line 562, in cwd
        return self.voidcmd(cmd)
      File "C:\Python27\lib\ftplib.py", line 254, in voidcmd
        return self.voidresp()
      File "C:\Python27\lib\ftplib.py", line 229, in voidresp
        resp = self.getresp()
      File "C:\Python27\lib\ftplib.py", line 224, in getresp
        raise error_perm, resp
    error_perm: 550 CWD failed. "/nono/11031938_1109950805697283_1069068117774435383_n.jpg/14706_10205412006411214_3091834777189694657_n.jpg": directory not found.
    J'ai beau cherché et je ne comprends pas pourquoi je me trouve dans ce repertoire :/

    Voici la partie du code qui a un problème:
    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
        def MAJ(self):
            ok = 1
            boucle = True
            os.chdir("Temp//")
            try:
                self.ftp.cwd(self.pseu + "//")
            except:
                ok = 0
     
            if ok ==1:
                rep = self.ftp.nlst("")
                for dossier in rep:
                    self.ftp.cwd(dossier + "//")
                    files = self.ftp.nlst("")
                    while boucle:
                        try:
     
                            os.mkdir(dossier)
                            print files
                            for f in files:
                                print f
                                if f != "path":
                                    self.ftp.retrbinary('RETR ' + f,open(dossier +"//" +f, 'wb').write)
     
     
                            self.ftp.cwd("path//")
                            path = self.ftp.nlst("")
                            os.mkdir(dossier + "//path")
                            for chemins in path:
                                self.ftp.retrbinary('RETR ' + chemins,open(dossier +"//path//" + chemins, 'wb').write)
                            self.ftp.cwd("..//..//")
     
     
     
     
     
                            boucle = False
                        except WindowsError:
                            print "erreur"
                            shutil.rmtree(dossier+"//")
                            boucle = True
    Quelqu'un pour m'aider ?

    Merci d'avance pour votre aide

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

    Il n'y a pas de raison de doubler les '/'. Il n'y a que les '\' de Windows qu'on double: '\\' (ou r'\').
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour votre remarque (j'en tiendrai compte dans mes futurs projets )

    Cependant je ne pense pas que l'erreur vienne de la , pourriez vous m'aider à la retrouver s'il vous plait ?

  4. #4
    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
    Tu as obtenu une erreur qui suggère une mauvaise construction du chemin: mets des "print" pour voir à quel endroit se trouve la faute.
    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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Oui je l'ai déja fait mais je n'ai pas réussit a trouver d’où venais le problème, ou plutôt si , bizarrement une fois la boucle for lancé, tout se déroule comme prévu pour le premier dossier, puis pour le second rien ne se télécharge et pour le troisième l'erreur apparait :/

  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,

    Une idée: si tu as mis un print pour voir ce que ramène ftp.nlst(), il est possible que '.' (=répertoire courant) et '..' (=répertoire précédent) se trouvent dans la liste: si c'est le cas, ça doit poser problème dans ton code.

    Je te suggère d'obtenir le contenu du répertoire courant avec quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noms = [nom for nom in ftp.nlst() if nom not in ['.', '..']]
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    Oui j'y avais déja pensé, mais le contenu de la liste est seulement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['photo.jpg', '11031938_1109950805697283_1069068117774435383_n.jpg', 'image.jpg', 'path1.txt', 'test2.txt', 'test3.txt']

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Personne n'a une idée ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    du nouveau sur une erreur plus facile a comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        t.MAJ()
      File "C:\Users\Norian\Dropbox\Spangler\Code source\FTP.py", line 68, in MAJ
        self.ftp.cwd(dossier + "//")
      File "C:\Python27\lib\ftplib.py", line 562, in cwd
        return self.voidcmd(cmd)
      File "C:\Python27\lib\ftplib.py", line 254, in voidcmd
        return self.voidresp()
      File "C:\Python27\lib\ftplib.py", line 229, in voidresp
        resp = self.getresp()
      File "C:\Python27\lib\ftplib.py", line 224, in getresp
        raise error_perm, resp
    error_perm: 550 CWD failed. "/nono/test2.txt/test3.txt": directory not found.
    L'erreur se produit donc ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for f in files:
                            print f
                            if f != "path":
                                self.ftp.retrbinary('RETR ' + f,open(dossier +"//" +f, 'wb').write)
    Je devrais à la place être dans:"/nono/test2.txt/test2.txt"
    Le problème c'est que je ne comprends pas pourquoi, de plus si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.ftp.retrbinary('RETR ' + dossier,open(dossier +"//" +dossier, 'wb').write)
    j'ai toujours la même erreur

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ton erreur est plus haut dans le code.

    Difficile de comprendre ce que tu veux faire exactement, mais il semble que t'emmêles les pinceaux dans tes dossiers/fichiers.

    De façon récursive, tu crées un nouveau dossier dans chaque "dossier" du même nom que "dossier" et ceci sans vérifier même si "dossier" est vraiment un dossier et non pas un fichier.

    Ça ne te saute pas aux yeux dans le message d'erreur que le dossier auquel tu veux accéder est en fait une image.

    Si j'analyse ton code, partant de l'assertion que self.ftp est une instance de ftplib et que self.pseu est "nono", je fais ces commentaires:
    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
     
        def MAJ(self):
            ok = 1
            boucle = True
            os.chdir("Temp//")
            try:
                self.ftp.cwd("nono" + "//")         # '/nono/'
            except:
                ok = 0
            if ok ==1:
                rep = self.ftp.nlst("")                # ['file', 'file2', ...]
                for dossier in rep:
                    self.ftp.cwd(dossier + "//")    # '/file/'
                    files = self.ftp.nlst("")           # ['subfile', 'subfile2', ...]
                    while boucle:
                        try:
                            os.mkdir(dossier)   # Création de 'file' dans 'file/'
                            print files              # "['subfile', 'subfile2', ...]"
                            for f in files:
                                print f                # "subfile"
                                if f != "path":     # ? la chaîne de texte "path" ?
     
    Le reste est à l'avenant ...
    Qu'est-ce que tu veux faire exactement ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Salut,
    En faite je voudrais simplement télécharger tous les dossiers ainsi que les fichiers se trouvant dans ces répertoires et les placer dans un dossier que j'ai nommé Temp

    EDIT: à la ligne 11 lorsque je me trouve dans /nono et que je liste tous ce qui se trouve dans /nono je suis sur qu'il n'y a ici que des repertoires (même si leurs nom est bizarre car il possèdent des extensions)
    Pour la chaine de caractère path, c'est parceque il y a un dossier s'appelant path et contenant un fichier texte avec le chemin absolu du fichier télécharger

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    OUIIIIIIII
    Après des jours de galères j'ai enfin trouver la solution !
    En plus elle était toute bête XD en faite le programme n'entrait qu'une seule fois dans la boucle puis s’arrêtait ce qui faisait qu'il ne se trouver pas dans le bon repertoire par la suite

Discussions similaires

  1. [BI4] Problèmes changement de couleurs avec l'option Conditionnel
    Par gautier.c dans le forum Webi
    Réponses: 2
    Dernier message: 20/01/2015, 14h32
  2. [MySQL] Problème changement de valeur avec colonne en "enum"
    Par Aiglichon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/01/2013, 20h18
  3. Réponses: 5
    Dernier message: 02/12/2008, 16h42
  4. Réponses: 0
    Dernier message: 19/12/2007, 20h17
  5. Problème protection répertoire avec .htaccess
    Par Silvia12 dans le forum Apache
    Réponses: 1
    Dernier message: 13/05/2006, 13h40

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