2014-01-17 72 views
1

我努力来实现这个功能:如果它们存在于FTP,如果没有更改目录在Python,不工作

变化的目录,创建和改变目录到它

def directory_exists(self, directory_name): 
     if directory_name in ftp.nlst(): 
      self.change_directory(directory_name) 
     else: 
      self.make_directory(directory_name) and self.change_directory(directory_name) 

函数调用:

def make_directory(self, directory): 
     if ftp.mkd(directory): 
      self.log_message("Directory {0} created successfully".format(directory)) 
      return True 
     else: 
      self.log_message("Failed creating directory") 
      return False 

def change_directory(self, directory): 
     if ftp.cwd(directory): 
      self.log_message("Current Directory is now {0}".format(ftp.pwd())) 
     else: 
      self.log_message("Can't change Directory") 

此代码当前工作是否有新的目录给出的parameter,如果现有目录中给出,该回溯来。

Traceback (most recent call last): 
    File "C:/Users/Ajay/PycharmProjects/database/config.py", line 17, in <module> 
    ftp_obj.directory_exists(directory) 
    File "C:\Users\Ajay\PycharmProjects\database\ftp.py", line 51, in directory_exists 
    self.make_directory(directory_name) and self.change_directory(directory_name) 
    File "C:\Users\Ajay\PycharmProjects\database\ftp.py", line 34, in make_directory 
    if ftp.mkd(directory): 
    File "C:\Python27\lib\ftplib.py", line 568, in mkd 
    resp = self.sendcmd('MKD ' + dirname) 
    File "C:\Python27\lib\ftplib.py", line 244, in sendcmd 
    return self.getresp() 
    File "C:\Python27\lib\ftplib.py", line 219, in getresp 
    raise error_perm, resp 
ftplib.error_perm: 550 Can't create directory: File exists 

我的代码函数调用逻辑:

directory = '/new' 
ftp_obj.directory_exists(directory) 
+0

'if ftp.cwd(directory):''cwd''通常表示“当前工作目录”。你可能根本没有改变目录,只是得到当前的那个 – goncalopp

+0

这不是''和'工作的方式...... – jonrsharpe

+1

@goncalopp当给出服务器**中不存在的新目录**时,它使该目录和光盘成功。 – ajkumar25

回答

1

我的小窍门解决了这个。

def directory_exists(self, directory_name): 
     new_dir_name = directory_name.strip("/") 
     if new_dir_name in ftp.nlst(): 
      self.change_directory(directory_name) 
     else: 
      self.make_directory(directory_name) 
      self.change_directory(directory_name) 

现在,一切工作正常。

0

大概ftp.nlst在不正是你所使用的格式相匹配的格式(“NEWDIR”与”返回目录名./ newdir'与'/ full/path/newdir')。但是,当您尝试创建已存在的目录时,ftp.mkd会引发异常,而不是返回False。考虑到这一点,你可以只改变directory_exists总是试图创建的目录,然后CHDIR不管它是否成功:

def directory_exists(self, directory_name): 
    try: 
     ftp.mkd(directory_name) 
     self.log_message("Directory {0} created successfully".format(directory)) 
    except ftplib.error_perm: 
     pass #you could check for other errors also 
    self.change_directory(directory_name)