如何在Python中使用FTPlib

问题描述:

我正在编写一个应用程序,该应用程序应该将文件上载到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

这可能是因为文件名是完整的路径,你应该使用基本名称改为:

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

如果不能确保你的Python是在正确的地方运行:

import os 
print os.getcwd() 

什么下面的代码报告有错误吗?

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

看起来您正在传递完整路径来打开文件,并且您正在使用相同的完整路径为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