Скрипт Python для загрузки файлов через FTP

Я хотел бы сделать скрипт для загрузки файла на FTP.

Как будет работать система входа в систему? Я ищу что-то вроде этого:

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

и любые другие учетные данные для входа.

5 ответов


использовать ftplib можно написать так:

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()

использовать ftplib.FTP_TLS вместо этого, если FTP-хост требует TLS.


чтобы получить его, вы можете использовать urllib.retrieve:

import urllib 

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

редактировать:

чтобы узнать текущий каталог, используйте FTP.pwd():

FTP-сервер.pwd (): возвращает путь к текущему каталогу на сервер.

чтобы изменить каталог, используйте FTP.cwd(pathname):

FTP-сервер.cwd (путь): задайте текущий каталог на сервере.


вы скорее всего хотите использовать модуль ftplib для 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"

это регистрирует вас на FTP-сервере. Что вы будете делать дальше, зависит от вас. Ваш вопрос не указывает на какие-либо другие операции, которые действительно нуждаются в выполнении.


Я только что ответил на аналогичный вопрос здесь IMHO, если ваш FTP-сервер способен общаться с тканью, пожалуйста, нам ткань. Это намного лучше, чем делать raw ftp.

у меня есть учетная запись FTP от dotgeek.com поэтому я не уверен, что это будет работать для других учетных записей 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')

сохранить файл как fabfile.py и работать fab copy локально.

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.

еще раз, если вы не хотите вводить пароль все время, просто добавьте

env.password = 'my_password'

попробуйте это:

#!/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()

вы можете использовать следующие функции. Я еще не тестировал его, но он должен работать нормально. Помните, что назначение-это путь к каталогу, где в качестве источника-полный путь к файлу.

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"