Un makedirs avec ftplib ?

a marqué ce sujet comme résolu.

Bonjour,

j'aurais besoin de créer un chemin sur mon ftp (is/an/example).
Le problème, si je le fais avec ftp.mkdil me dit qu'il n'existe pas.

Avez vous une solution de comment faire l'équivalent d'un os.makedirs() avec un mkd ? Je n'ai pas assez de logique python pour y parvenir.

En vous remerciant !

Image utilisateur

On peut voir que quand je créer un dossier dans un dossier existant c'est correcte. Par contre si je le créer dans un dossier qui n'existe pas … Erreur.

Je ne suis pas sur que se soit exactement se que je veux Vayel, mais peut-être que je me trompe.

Merci à vous

Je ne pense pas que tu puisses y faire grand chose. mkd est implémentée de sorte que tu ne peux créer de dossier que dans un dossier existant.

Après, tu peux te faire une fonction qui prend un chemin en argument, le découpe pour récupérer les noms des dossiers, vérifie pour chacun s'il existe et le crée si ce n'est pas le cas. En gros, ce serait :

1
2
3
4
5
6
7
8
9
def makedirs(path):
    dirs = path.split("/")
    current_path = "" # Ou "/", à voir

    for dir in dirs:
        current_path = os.path.join(current_path, dir)

        if not os.path.isdir(current_path):
            os.makedirs(current_path)
+0 -0

Je vois … et c'est un peu la que je bloque.

Pourquoi ? Le lien que je t'ai donné te montre comment lister un dossier (tu en déduis os.path.isdir) et en créer un (tu en déduis os.mkdir).

Sinon, il y a Python sur ton serveur FTP ? Si oui, tu lui envoies un programme prenant en argument un chemin et il se charge d'appeler os.makedirs.

+0 -0

Mon serveur FTP est un ftp mutualisé (Hébergement web).

Mais je pense qu'avec le code que tu m'as montrer, je devrais réussir.

[edit]
Voici ce que j'ai fait:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def makedirs(ftp, path):
    dirs = path.split('/')
    current_path = ''

    for dirname in dirs:
        current_path = os.path.join(current_path, dirname)

        try:
            ftp.cwd(dirname)
            print('CWD {}'.format(dirname))
        except:
            ftp.mkd(dirname)
            print('MKD {}'.format(dirname))
            ftp.cwd(dirname)
            print('CWD {}'.format(dirname))

from ftplib import FTP
ftp = FTP('***', '***', '***')

print("Connected")
makedirs(ftp, 'testscript/test/autre')

(Je sais que Current_path ne me sert à rien ici)

Résultat:

Résultat

+0 -0

L'erreur que tu as eu n'est-elle pas dû au fait que tu n'as pas fais un cwd après avoir créé autresupertest ? Tu ne peux créer un dossier que les uns derrière les autres, il me semble. Ça fait une éternité que je n'ai pas utilisé ce module.

Justement, ici je test si je peux me déplacer dans le sous-dossier avec cwd, si je peux c'est que le dossier existe.

Si ça provoque une erreur, c'est que le dossier n'existe pas (Il faudra encore que je précise une erreur du type ftplib.error_perm si je ne dis pas de bêtise) et donc je créer le dossier et m'y déplace dedans.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte