2010-10-19 20 views
2

我正在編寫一個應用程序,該應用程序應該將文件上載到FTP服務器。如何在Python中使用FTPlib

下面的代碼:

try: 
     f = open(filename,"rb") 
    except: 
     print "error 0" 
    try: 
     ftp = FTP(str(self.ConfigUri)) 
     print "CONNECTED!" 
    except: 
     print "CANNOT CONNECT" 
    try: 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
    except: 
     print "error 1" 
    try: 
     ftp.login()    # user anonymous, passwd [email protected] 
    except: 
     print "error2" 
    try: 
     ftp.storbinary('STOR ' + filename, f) 
    except: 
     print "error 3" 
    try: 
     ftp.quit() 
    except: 
     print "error 4" 

我得到一個錯誤的ftp.storbinary( 'STOR' +文件名,F)。任何想法爲什麼?

+2

嘗試用'except except,e:'替換'except:'行,並在下一行放置print e'。它會給你更多的信息,而不是簡單的「打印」錯誤3「' – eumiro 2010-10-19 18:06:47

+1

似乎你喜歡樣板代碼。你有沒有想過用Java編程?好吧,開開玩笑 - 永遠不要使用'嘗試:...除了:'。如果您無法處理特定異常,請讓它通過,以便您可以看到回溯。刪除所有那些'except:print ...'行並告訴我們你得到了什麼異常。 – AndiDog 2010-10-19 18:07:48

+1

你爲什麼連接兩次? – SilentGhost 2010-10-19 18:33:20

回答

1

這可能是因爲文件名是完整的路徑,你應該使用基本名稱改爲:

import os 
folder, base = os.path.split(filename) 
ftp.storbinary('STOR ' + base, f) 

如果不能確保你的Python是在正確的地方運行:

import os 
print os.getcwd() 
0

什麼下面的代碼報告有錯誤嗎?

try: 
    with open(filename,"rb") as f: 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
     ftp.login()    # user anonymous, passwd [email protected] 
     ftp.storbinary('STOR ' + filename, f) 
     ftp.quit() 
except Exception, e: 
    print e 

編輯Error 550?貌似拒絕訪問的錯誤...是否匿名用戶必須寫入該FTP目錄下的權利?

+0

沒有這樣的目錄或目錄 – Juli 2010-10-19 18:12:51

+0

文件名是doc.txt – Juli 2010-10-19 18:13:07

+0

文件doc.txt是否存在於當前目錄中? – eumiro 2010-10-19 18:15:04

0

看起來您正在傳遞完整路徑來打開文件,並且您正在使用相同的完整路徑爲ftplib命名該文件。取而代之的是,cd到那個目錄並且用文件名命名文件。

偷@ eumiro代碼:

from ftplib import FTP 
import os.path 

try: 
    with open(fullpath,"rb") as f: 
     directory, filename = os.path.split(fullpath) 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
     ftp.login()    # user anonymous, passwd [email protected] 
     ftp.cwd(directory) 
     ftp.storbinary('STOR ' + filename, f) 
     ftp.quit() 
except Exception, e: 
    print e 

如果該目錄不在服務器上,你可以把它:

ftp.mkd(directory) 

或者你可以省略ftp.cwd()調用和公正將文件放在ftp根目錄下。

+0

'directory'是一個本地目錄 – SilentGhost 2010-10-19 18:25:12

+0

@SilentGhost:我明白了。服務器可能具有相同的目錄結構,或者OP想要創建它。將文件放在ftp根目錄下將是最直接的測試。 (我建議拆分目錄和文件名是基於未經測試的懷疑,即ftp.storbinary()根本不採用路徑。)誰將首先在此問題上投票贊成? Woooo,期待! – hughdbrown 2010-10-19 18:42:34