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 :

[Python3.x] Lire un fichier par ftp


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut [Python3.x] Lire un fichier par ftp
    Bonjour,

    Je voudrais savoir s'il est possible de lire un fichier par ftp sans le copier?

    Merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il faudra, bien entendu, que le contenu du fichier ftp soit téléchargé! Le seule chose qu'on peut essayer d'éviter, c'est l'enregistrement sur disque.

    On devrait pouvoir le faire avec un fichier virtuel du module "io" (Python 3). Pour un fichier texte, la classe "StringIo" devrait convenir. Pour un fichier binaire, voir les autres classes de ce module. Avec Python 2, StringIo était un module.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par Supernatural Voir le message
    Je voudrais savoir s'il est possible de lire un fichier par ftp sans le copier?
    La réponse sera oui au sens où vous n'êtes pas obligé de créer une copie locale du fichier (en gardant tout en mémoire). Mais je serais curieux de savoir quel problème cherchez vous à résoudre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Comme je n'avais jamais fait ça, et que je suis curieux, j'ai essayé:

    On ne détaillera pas ici l'ouverture et la fermeture de la connexion FTP

    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
    from io import BytesIO 
     
    # ouvre la connexion FTP => ftp
     
    # adresse du fichier sur le serveur FTP
    fichierftp = "adresse/du/fichier/sur/le/serveur/FTP"
     
    # ouvre un fichier virtuel en mémoire
    flocal = BytesIO()
     
    # télécharge le fichier sous forme binaire (donc => bytes):
    ftp.retrbinary('RETR ' + fichierftp, flocal.write)
     
    # convertit les bytes en strings (il faut connaître l'encodage)
    texte = str(flocal.getvalue(), encoding='utf-8')
     
    # affiche les lignes de texte
    for ligne in texte.splitlines():
        print(ligne)
     
    # ferme le fichier virtuel
    flocal.close()
     
    # ferme la connexion FTP
    Bien sûr, s'il faut afficher le fichier texte dans un éditeur de texte de l'OS, il y a un petit problème: les éditeurs demandent en général un fichier sur disque. On pourrait peut-être passer par un copier-coller, mais il y a une autre possibilité tout de même: utiliser une bibliothèque graphique: en accédant à un éditeur directement par son code, on pourrait lui donner une chaine de caractères à afficher. Mais ça complique sérieusement le développement...

  5. #5
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Bonjour,

    Je souhaite juste lire un fichier par ftp (sans le télécharger, ni rien d'autre... juste ouvrir, lire puis fermer) et stocker ses données dans un array pour les traiter, ça n'a pas l'air trè compliqué mais ça m'occupe...

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Supernatural Voir le message
    Je souhaite juste lire un fichier par ftp (sans le télécharger, ni rien d'autre... juste ouvrir, lire puis fermer) et stocker ses données dans un array pour les traiter...
    Je pensais avoir répondu à cette question, aussi, j'insiste: tu ne peux pas visualiser le contenu du fichier sans le télécharger! et encore moins récupérer ses données dans un array. Tu peux juste éviter son enregistrement sur disque local: il reste alors en mémoire pour traitement. Si c'est pour aller plus vite, peut-être qu'un disque virtuel en RAM serait plus adapté?

  7. #7
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    Juste pour ma culture personnelle, pourquoi je ne peux pas par ftp ouvrir un fichier, le lire ligne par ligne (en parallele stocker chaque ligne lue dans un array), ensuite fermer le fichier?
    Dans un autre language de programmation, j'arrive à faire cela sans avoir à le télécharger ou stocker quelque part... sauf si c'est moi qui ne comprend rien à la philosophie ftp.

  8. #8
    Membre éclairé
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mai 2017
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mai 2017
    Messages : 474
    Par défaut
    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
    from io import BytesIO 
     
    # ouvre la connexion FTP => ftp
     
    # adresse du fichier sur le serveur FTP
    fichierftp = "adresse/du/fichier/sur/le/serveur/FTP"
     
    # ouvre un fichier virtuel en mémoire
    flocal = BytesIO()
     
    # télécharge le fichier sous forme binaire (donc => bytes):
    ftp.retrbinary('RETR ' + fichierftp, flocal.write)
     
    # convertit les bytes en strings (il faut connaître l'encodage)
    texte = str(flocal.getvalue(), encoding='utf-8')
     
    # affiche les lignes de texte
    for ligne in texte.splitlines():
        print(ligne)
     
    # ferme le fichier virtuel
    flocal.close()
     
    # ferme la connexion FTP
    Si je comprend bien, flocal est un fichier virtuel? il n'est écrit nul par c'est ça?

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

Discussions similaires

  1. [FTP] Télécharger un fichier par FTP
    Par jerome38000 dans le forum Langage
    Réponses: 5
    Dernier message: 27/05/2011, 15h41
  2. [Upload] upload de fichier par ftp
    Par sami_c dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2006, 11h18
  3. Transfert fichier par FTP
    Par j_bolduc dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2005, 19h59
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. Réponses: 1
    Dernier message: 19/08/2003, 16h11

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