web-dev-qa-db-fra.com

Script Python Chargement de fichiers via FTP

Je voudrais faire un script pour télécharger un fichier sur FTP.

Comment le système de connexion fonctionnerait-il? Je cherche quelque chose comme ça:

ftp.login=(mylogin)
ftp.pass=(mypass)

Et toute autre signature dans les informations d'identification.

54

Utilisez ftplib , vous pouvez l'écrire comme ceci:

import ftplib
session = ftplib.FTP('server.address.com','USERNAME','PASSWORD')
file = open('kitten.jpg','rb')                  # file to send
session.storbinary('STOR kitten.jpg', file)     # send the file
file.close()                                    # close file and FTP
session.quit()

Utilisez plutôt ftplib.FTP_TLS si votre hôte FTP requiert TLS.


Pour le récupérer, vous pouvez utiliser urllib.retrieve :

import urllib 

urllib.urlretrieve('ftp://server/path/to/file', 'file')

MODIFIER:

Pour trouver le répertoire actuel, utilisez FTP.pwd()

FTP.pwd (): Retourne le chemin du répertoire actuel sur le serveur.

Pour changer de répertoire, utilisez FTP.cwd(pathname) :

FTP.cwd (chemin d'accès): définit le répertoire actuel sur le serveur.

148
K Z

Vous voudrez probablement utiliser le module ftplib pour python

 import ftplib
 ftp = ftplib.FTP()
 Host = "ftp.site.uk"
 port = 21
 ftp.connect(Host, port)
 print (ftp.getwelcome())
 try:
      print ("Logging in...")
      ftp.login("yourusername", "yourpassword")
 except:
     "failed to login"

Cela vous connecte à un serveur FTP. Ce que vous faites à partir de là dépend de vous. Votre question n'indique aucune autre opération à faire. 

5
Tadgh

Essaye ça:

#!/usr/bin/env python

import os
import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username="username", password="password")
sftp = ssh.open_sftp()
localpath = '/home/e100075/python/ss.txt'
remotepath = '/home/developers/screenshots/ss.txt'
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()
3
Anand

Je viens de répondre à une question similaire ici IMHO, si votre serveur FTP est capable de communiquer avec Fabric s'il vous plaît nous Fabric. C’est bien mieux que de faire ftp brut.

J'ai un compte FTP à partir de dotgeek.com, donc je ne suis pas sûr que cela fonctionnera pour d'autres comptes FTP.

#!/usr/bin/python

from fabric.api import run, env, Sudo, put

env.user = 'username'
env.hosts = ['ftp_Host_name',]     # such as ftp.google.com

def copy():
    # assuming i have wong_8066.Zip in the same directory as this script
    put('wong_8066.Zip', '/www/public/wong_8066.Zip')

enregistrez le fichier en tant que fabfile.py et exécutez fab copy localement.

yeukhon@yeukhon-P5E-VM-DO:~$ fab copy2
[1.ai] Executing task 'copy2'
[1.ai] Login password: 
[1.ai] put: wong_8066.Zip -> /www/public/wong_8066.Zip

Done.
Disconnecting from 1.ai... done.

Encore une fois, si vous ne voulez pas entrer le mot de passe tout le temps, ajoutez simplement

env.password = 'my_password'
1
CppLearner

ftplib maintenant prend en charge les gestionnaires de contexte donc je suppose que cela peut être encore plus facile

from ftplib import FTP
from pathlib import Path

file_path = Path('kitten.jpg')

with FTP('server.address.com', 'USER', 'PWD') as ftp, open(file_path, 'rb') as file:
        ftp.storbinary(f'STOR {file_path.name}', file)

Pas besoin de fermer le fichier ou la session

1
gbonetti

Vous pouvez utiliser la fonction ci-dessous. Je ne l'ai pas encore testé, mais cela devrait fonctionner correctement. Rappelez-vous que la destination est un chemin de répertoire où source est chemin complet.

import ftplib
import os

def uploadFileFTP(sourceFilePath, destinationDirectory, server, username, password):
    myFTP = ftplib.FTP(server, username, password)
    if destinationDirectory in [name for name, data in list(remote.mlsd())]:
        print "Destination Directory does not exist. Creating it first"
        myFTP.mkd(destinationDirectory)
    # Changing Working Directory
    myFTP.cwd(destinationDirectory)
    if os.path.isfile(sourceFilePath):
        fh = open(sourceFilePath, 'rb')
        myFTP.storbinary('STOR %s' % f, fh)
        fh.close()
    else:
        print "Source File does not exist"
0
Debasish Mitra