簡體   English   中英

Python腳本通過FTP上傳文件

[英]Python Script Uploading files via FTP

我想制作一個腳本來將文件上傳到 FTP。

登錄系統將如何工作? 我正在尋找這樣的東西:

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

以及任何其他登錄憑據。

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

如果您的 FTP 主機需要 TLS,請改用ftplib.FTP_TLS


要檢索它,您可以使用urllib.retrieve

import urllib 

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

編輯

要找出當前目錄,請使用FTP.pwd()

FTP.pwd():返回服務器上當前目錄的路徑名。

要更改目錄,請使用FTP.cwd(pathname)

FTP.cwd(pathname):設置服務器上的當前目錄。

ftplib現在支持上下文管理器,所以我想它可以變得更容易

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)

無需關閉文件或會話

您很可能希望將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 服務器。 你從那里做什么取決於你。 您的問題並未表明任何其他真正需要做的操作。

嘗試這個:

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

為避免出現加密錯誤,您還可以嘗試以下命令

ftp = ftplib.FTP_TLS("ftps.dummy.com")
ftp.login("username", "password")
ftp.prot_p()
file = open("filename", "rb")
ftp.storbinary("STOR filename", file)
file.close()
ftp.close()

ftp.prot_p() 確保您的連接已加密

我剛剛在這里回答了一個類似的問題,恕我直言,如果您的 FTP 服務器能夠與 Fabric 通信,請使用 Fabric。 這比做 raw ftp好得多。

我有一個來自dotgeek.com的 FTP 帳戶,所以我不確定這是否適用於其他 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'

您可以使用以下功能。 我還沒有測試它,但它應該可以正常工作。 請記住,目標是目錄路徑,源是完整的文件路徑。

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM