def connect():
CONST_HOST = "xxxx.xxxx.xxx"
CONST_USERNAME = "xxxxx"
CONST_PWD = "xxxxxxx"
try:
ftp = ftplib.FTP(CONST_HOST)
ftp.login(CONST_USERNAME, CONST_PWD)
return ftp
except socket.error, socket.gaierror:
print("FTP is unavailable,please check the host,username and password!")
sys.exit(0)
def disconnect(ftp):
ftp.quit()
def download(ftp, filename):
#预定义每次写文件的buffer
CONST_BUFFER_SIZE = 8192
f = open(filename, "wb").write
try:
ftp.retrbinary("RETR %s" % filename, f, CONST_BUFFER_SIZE)
except ftplib.error_perm:
return False
return True
def find(ftp, filename):
ftp_f_list = ftp.nlst()
if filename in ftp_f_list:
return True
else:
return False
ftp = connect()
#yourfile为你想要下载的文件
if find(ftp, 'yourfile'):
download(ftp, 'yourfile')
disconnect(ftp)
直接使用ftplib就可以实现,其中有一个nlst功能用于查询目录,cwd用于改变目录,还有一个size功能。你这边只需要保留一个目录的镜像。如果发现有目录差异,或者是文件大小发生变更,就用retrbinary进行文件同步就可以。另外这样的ftp自动同步软件很多年前就有,现在很成熟。不用重新开发。
import ftplibpath = 'c:/user/pcwuyu/desktop/1c0/'
l = []
def ls_filter(line):
ll = line.split()
if ll[5]=='Jan' and ll[6]=='9' and ll[7]>'14:30' and ll[7]<'15:30':
if ll[8]!='.' and ll[8]!='..':
l.append(ll[8])
return ll[8]
ftp = ftplib.FTP('127.0.0.1')
ftp.login('root','password')
ftp.cwd('/mnt/1c0')
ftp.set_pasv(False)
fs = ftp.retrlines('LIST',ls_filter)
for i in l:
ftp.retrbinary('RETR ' + i,open(path + i, 'wb').write)
ftp.quit()
一个简单的例子,下载1月9日14:30~15:30的文件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)