python,如何下载FTP上的文件

python,如何下载FTP上的文件,第1张

import ftplib, socket

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 ftplib

path = '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的文件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12033120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存