在ftplib storbinary中创建缺少的目录

Ali*_*iBZ 12 python pycurl ftplib

我在python中使用pycurl通过ftp传输文件.我可以使用以下命令在远程服务器上自动创建缺少的目录:

c.setopt(pycurl.FTP_CREATE_MISSING_DIRS, 1)
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我必须切换到ftplib.但我不知道如何在这里相同.是否有任何选项可以添加到storbinary函数来做到这一点?或者我必须手动创建目录?

Ale*_*x L 17

FTP_CREATE_MISSING_DIRS是卷曲操作(在此处添加).我猜测你必须用ftplib手动完成它,但我很想被证明是错的,有人吗?

我会做类似以下的事情:(未经测试,需要抓住ftplib.all_errors)

ftp = ... # Create connection

# Change directories - create if it doesn't exist
def chdir(dir): 
    if directory_exists(dir) is False: # (or negate, whatever you prefer for readability)
        ftp.mkd(dir)
    ftp.cwd(dir)

# Check if directory exists (in current location)
def directory_exists(dir):
    filelist = []
    ftp.retrlines('LIST',filelist.append)
    for f in filelist:
        if f.split()[-1] == dir and f.upper().startswith('D'):
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做directory_exists:(有点难读?)

# Check if directory exists (in current location)
def directory_exists(dir):
    filelist = []
    ftp.retrlines('LIST',filelist.append)
    return any(f.split()[-1] == dir and f.upper().startswith('D') for f in filelist)
Run Code Online (Sandbox Code Playgroud)


lec*_*cnt 10

我知道这是一个很老的帖子,但我只是需要这个,并提出了一个非常简单的功能.我是Python的新手,所以我很感激任何反馈.

from ftplib import FTP

ftp = FTP('domain.com', 'username', 'password')

def cdTree(currentDir):
    if currentDir != "":
        try:
            ftp.cwd(currentDir)
        except IOError:
            cdTree("/".join(currentDir.split("/")[:-1]))
            ftp.mkd(currentDir)
            ftp.cwd(currentDir)
Run Code Online (Sandbox Code Playgroud)

用法示例:

cdTree("/this/is/an/example")
Run Code Online (Sandbox Code Playgroud)

  • 非常好 !`dir`是一个内置的python你可能想要改变那个变量名...也想要捕获特定的异常,而不是所有的异常 (3认同)
  • 这不再适用(对我来说)。我必须将 `ioerror` 更改为 `ftplib.error_perm`,将 `ftp.mkd(currentDir)` 更改为 `ftp.mkd(currentDir.split("/")[-1])`。 (2认同)