如何通过python 3.3使用Filezilla

时间:2013-11-28 03:00:17

标签: python python-3.x filezilla

我需要下载大量数据(每天大约30 GB,其中一些文件大于1GB)。特别是对于大文件,我通过FileZilla下载的速度比我手动下载(右键单击并保存在Windows中)或通过Python 3.3下载快一个数量级(几乎10倍)。

下面给出的我的python 3.3脚本以递归方式遍历FTP站点上的目录,并且只有在尚未下载该文件的情况下才下载文件(它是此论坛上两个不同帖子的修改版本)。我想替换Python 3.3的本机ftplib(在下面的代码中)来使用FileZilla。

import ftplib
import os

def traverseFTP(ftpObj,depth,cdir,bdir):
    # print(depth)
    if depth>10:
        return []
    else:
        # do the following
        data=[]
        ftpObj.dir(data.append)
        for entry in data:
            # dName=entry[55:len(entry)].strip()
            dName=entry.split()[-1]
            dIsDir=entry[0]
            if dName!="." and dName!="..":
                if dIsDir!="d":
                    # download if not already downloaded
                    dFullName=bdir+cdir+"\\"+dName
                    if not os.path.isfile(dFullName):
                        print("... Downloading ",dName)
                        if not os.path.isdir(bdir+cdir): os.makedirs(bdir+cdir)
                        ftpObj.retrbinary('RETR %s' % dName,open(dFullName,'wb').write)
                else:
                    ftpObj.cwd(dName)
                    cdir1=cdir+"\\"+dName
                    print("\nEntering ",cdir1)
                    traverseFTP(ftpObj,depth+1,cdir1,bdir)
                    ftpObj.cwd("..")
                    print("Exiting ",cdir1)

def ftpInitialize(ftpHost,userID,userPW):
    ftpObj=ftplib.FTP(ftpHost)
    ftpObj.login(user=userID,passwd=userPW)
    return ftpObj

def main():
    ftpHost="hostname"
    userID="userlogin"
    userPW="userpassword"
    targetDir="D:\\LocalDir"
    ftpObj=ftplib.FTP(ftpHost)
    ftpObj.login(user=userID,passwd=userPW)
    traverseFTP(ftpObj,0,"",targetDir)
    ftpObj.quit()

if __name__=="__main__":
    main()

请注意:请认为我是Python初学者(因此将非常感谢详细的答案)。

此外,Python 3.3的ftplib中的文件大小(下载文件的)是否有任何限制?我的代码通常在尺寸>上被绞死0.5 GB,但在尺寸上工作正常< 0.5 GB。我在64位Windows 7 PC上使用WinPython-64bit-3.3.2.1发行版(即6​​4位)。

0 个答案:

没有答案