Un makedirs avec ftplib ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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 !

+0 -0
Auteur du sujet

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

+0 -0

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)

Édité par Vayel

+0 -0
Auteur du sujet

Je vois … et c'est un peu la que je bloque.
(Il n'existerait pas aussi une commande ftp pour faire faire ? ftp.sendcmd(XXX)

Merci

[edit]
Merci pour le code, je vais voir !

Édité par WinXaito

+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
Auteur du sujet

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

Édité par WinXaito

+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.

+0 -0
Auteur du sujet

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.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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