下载FTP文件跳过类似的文件

时间:2013-11-28 12:00:52

标签: python ftp download

我正在尝试将文件从ftp服务器下载到我的Python目录。我想检查文件是否存在于我的计算机中的某个位置。我想跳过现有文件,只复制My Python Directory路径中不存在的文件。

当我运行脚本时,它开始下载文件。但是,它复制存在的文件以及不存在的文件。然后它在中途断开连接。要做出哪些更正? 我知道有类似的例子,但请让我知道为什么这不起作用。 这是我的剧本。

 class Testing():
        def __init__(self):
            import ftplib
            f = ftplib.FTP('ftp_server_path','login_name','password')
            f.cwd('new_directory')
            f.cwd('new_directory')

            import os
            for ftp_file in f.nlst():

                for filename in os.listdir("path_where_files_exist"):

                    if not (ftp_file == filename):
                        print('Downloading file: %s', ftp_file)
                        f.retrbinary('RETR '+ ftp_file ,open(ftp_file,'wb').write,rest=0)
                        break;
            f.quit()

1 个答案:

答案 0 :(得分:1)

这可以解决覆盖文件的问题。

for ftp_file in f.nlst():
    if ftp_file not in os.listdir("path_where_files_exist"):
        print('Downloading file: %s', ftp_file)
        f.retrbinary('RETR '+ ftp_file ,open(ftp_file,'wb').write,rest=0)
        f.quit()

使用2个循环,条件是问题。 你的代码:

for ftp_file in f.nlst():
    for filename in os.listdir("path_where_files_exist"):
        if not (ftp_file == filename):
        #some code

对于一个ftp_file,它会检查每个filename。每次发现ftp_file不等于filename时,都会将其下载。

因此,即使该文件存在,该条件将在目录中的每个其他filename返回True,并且ftp_file将被下载的次数与目录中的文件一样多。

希望这有帮助。