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 :

Verification ajout fichier sur serveur FTP [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Verification ajout fichier sur serveur FTP
    Bonsoir,

    Alors voilà j'explique mon problème, je voudrais que un bot discord en python analyse mon serveur FTP, qu'il vérifie s'il n'y a pas de nouveau fichier et s'il y en a une, une message dissant qu'un nouveau fichier est disponible sur le serveur. Pour l'instant j'ai réussie a faire mon bot discord(connexion) et la connexion a mon serveur FTP mais je ne trouve pas comment faire pour la vérification

    Bonne soirée
    Cordialement,
    Maxime

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

    Comme ceci:
    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
     
            try:
                ftp = FTP('ton IP')
                ret = ftp.login('nom', 'password')
                logger.info('%s' % ret)
            except Exception as why:
                logger.warning('Error: %s' % why)
                try:
                    ftp.quit()
                except:
                    pass
                sys.exit()
     
            # J'utilise un dossier temp pour les nouveaux fichiers
            ftp.cwd(self.temp)
            for item in ftp.mlsd():
                print(item)
                # item[0] est le nom du fichier
                # tu procèdes selon ton besoin ....
    Je te recommande de toujours placer tes actions dans des blocs try-except.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Voici, quand je lance ce code, j'ai rien qui s'affiche
    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
    import logging
    import sys
    from ftplib import FTP
     
    host = "localhost" ; 
    user = "test";
    password = "test";
     
    try:
        ftp = FTP(host)
        ret = ftp.login(user, password)
        logging.info('%s' % ret)
    except Exception as why:
        logging.warning('Error: %s' % why)
    try:
            ftp.quit()
    except:
                    pass
    sys.exit()
     
    # J'utilise un dossier temp pour les nouveaux fichiers
    ftp.cwd(self.temp)
    for item in ftp.mlsd():
                print(item)
    # item[0] est le nom du fichier
    # tu procèdes selon ton besoin ....
    et dans quelle répertoire le fichier log se trouve

  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
    Bonjour,

    A partir d'un répertoire "repftp" du serveur ftp donné, on peut avoir la liste de son contenu par (ftp est ici la variable de connexion):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noms = ftp.nlst(repftp)
    chaque nom étant précédé par le chemin repftp.

    Mais, bien sûr, il y a dans cette liste les fichiers mais aussi les sous-répertoires éventuels, y compris les '.' et '..'. Il faut donc neutraliser les sous-répertoires avec un test.

    Ce test n'est pas prévu dans le protocole ftp, mais on peut utiliser l'astuce suivante: on cherche à changer de répertoire => si ça ne marche pas, c'est un fichier! Voilà un exemple de code qui fait ça:

    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)
        """
        repcourantftp = ftp.pwd()
        try:
            ftp.cwd(chemin)
            ftp.cwd(repcourantftp) # revenir au répertoire courant!
            return True
        except ftplib.error_perm:
            return False
    Avec un tel test, voilà comment on peut obtenir la liste des fichiers d'un répertoire ftp donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def listefichiersftp(ftp, repftp):
        """renvoie la liste des fichiers du répertoire demandé repftp
           utilise la fonction estrepftp pour dire si le nom est un répertoire
        """
        fichiers = []
        noms = ftp.nlst(repftp) # liste du contenu du répertoire ftp
        for nom in noms:
            nom = nom.rstrip() # on retire espaces et fin de ligne à droite
            if estrepftp(ftp, nom):
                continue # on neutralise ce nom qui est celui d'un répertoire
            fichiers.append(nom)    
        return fichiers
    Il reste à savoir comment on fait apparaître les fichiers nouveaux!

    On peut conserver quelque part une liste de référence, mais on peut aussi se baser sur la date du fichier. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def datemodifftp(ftp, fichierftp):
        """retourne la date et heure de la dernière modification du fichier
        """
        return ftp.sendcmd('MDTM ' + fichierftp)[4:]
    La chaine de caractères renvoyée, par exemple "20170429165457" (pour la date "29/04/2017" et l'heure "16:54:57") est intéressante parce que l'ordre alphabétique de tri est identique à l'ordre chronologique.

    On pourrait aussi renvoyer la date et l'heure sous format "datetime", etc...

    Voir la documentation: https://docs.python.org/3/

    Voir aussi la liste des requêtes possibles du protocole ftp (mais toutes ne marchent pas sur certains serveurs!): https://fr.wikipedia.org/wiki/Liste_des_commandes_ftp.

    Voilà quelques idées à adapter à ton problème.
    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
    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
    Citation Envoyé par Maxime45400 Voir le message
    Voici, quand je lance ce code, j'ai rien qui s'affiche
    Ce qui est normal vu l'endroit où tu as placé le sys.exit() ...

    Ensuite tu recopies le cwd(self.temp) tel quel, il faut adapter à ton cas et mettre le nom du dossier où se trouvent tes fichiers, i.e. "logs"

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    quand tu parle des mes fichier, c'est le log ou mes fichier du mon dossier

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/05/2011, 20h06
  2. Formulaire d'insertion de fichiers sur serveur FTP
    Par CyrilD dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2010, 17h20
  3. Enumération fichiers sur serveur FTP
    Par STRIKER94 dans le forum Excel
    Réponses: 15
    Dernier message: 11/04/2010, 13h13
  4. + de 2000 fichiers sur serveur FTP
    Par _seb_ dans le forum WinDev
    Réponses: 4
    Dernier message: 17/09/2007, 10h59
  5. Erreur programme d'envoi fichier sur serveur ftp
    Par batssa dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2007, 14h30

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