我正在尝试将文件从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()
答案 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
将被下载的次数与目录中的文件一样多。
希望这有帮助。