Bonjour,
Je voudrais savoir s'il est possible de lire un fichier par ftp sans le copier?
Merci
Bonjour,
Je voudrais savoir s'il est possible de lire un fichier par ftp sans le copier?
Merci
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.
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
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...
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
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...
Bonjour,
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é?
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.
Si je comprend bien, flocal est un fichier virtuel? il n'est écrit nul par c'est ça?
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
Partager