啊峰哥

2.4 利用FTP服务器下载和上传目录

利用FTP服务器下载目录

import os,sys
from ftplib import FTP
from mimetypes import guess_type

nonpassive = False                                                         #passive FTP by default
remotesite = '192.168.191.1'
remotedir = '.'                                                            #FTP的路径
remoteuser = ()                                                            #因为我没设置密码,所以为空集

localdir = '.'                                                             #本地路径

clean_all = input( 'Clean local directory first? ')[:1] in ['y','Y']       #是否清除本地目录所有文件
#连接PFTP
print('connecting...')
connection = FTP(remotesite)
connection.login(*remoteuser)
connection.cwd(remotedir)
if nonpassive:
    connection.set_pasv(False)                                             #most servers do passive
#清除
if clean_all:
    for localname in os.listdir(localdir):
        try:
            print('deleting local',localname)
            os.remove(os.path.join(remotedir,localname))
        except:
            print('cannot delete', localname)

count = 0
remotefiles = connection.nlst()
#只能下载目录中的文件,不能下载目录中的目录
for remotename in remotefiles[:5]:
    if remotename in ('.','..') or not '.' in remotename:continue             #判断是否目录,这里根据实际情况更改
    mimetype,encoding = guess_type(remotename)
    mimetype = mimetype or '?/?'
    mimetype = mimetype.split('/')[0]

    localpath = os.path.join(localdir,remotename)
    print('downing',remotename,'to',localpath,end=' ')
    print('as',mimetype,encoding or '')
    #保存文件
    if mimetype == 'text' and encoding == None:
        localfile = open(localpath,'w',encoding=connection.encoding)
        callback = lambda line: localfile.write(line + '\n')
        connection.retrlines('RETR '+remotename,callback)
    else:
        localfile = open(localpath,'wb')
        connection.retrbinary('RETR '+remotename,localfile.write)

    localfile.close()
    count += 1

connection.quit()
print('Done:',count,'file download.')

 

利用FTP服务器上传目录

import os,sys
from ftplib import FTP
from mimetypes import guess_type

nonpassive = False                                                         #passive FTP by default
remotesite = '192.168.191.1'
remotedir = 'RRR'                                                            #FTP的路径
remoteuser = ()                                                            #因为我没设置密码,所以为空集

localdir = 'TTT'                                                             #本地路径

clean_all = input( 'Clean local directory first? ')[:1] in ['y','Y']       #是否清除远程目录所有文件
#连接PFTP
print('connecting...')
connection = FTP(remotesite)
connection.login(*remoteuser)
connection.cwd(remotedir)
if nonpassive:
    connection.set_pasv(False)                                             #most servers do passive
#清除
if clean_all:
    for remotename in connection.nlst():
        try:
            print('deleting local',remotename)
            connection.delete(remotename)
        except:
            print('cannot delete', remotename)

count = 0
localfiles = os.listdir(localdir)
#只能下载目录中的文件,不能下载目录中的目录
for localname in localfiles[:5]:
    mimetype,encoding = guess_type(localname)
    mimetype = mimetype or '?/?'
    mimetype = mimetype.split('/')[0]

    localpath = os.path.join(localdir,localname)
    print('downing',localname,'to',localpath,end=' ')
    print('as',mimetype,encoding or '')
    #保存文件
    if mimetype == 'text' and encoding == None:
        localfile = open(localpath,'rb')
        connection.storlines('RETR '+localname,localfile)
    else:
        localfile = open(localpath,'rb')
        connection.storbinary('RETR '+localname,localfile)

    localfile.close()
    count += 1

connection.quit()
print('Done:',count,'file uploaded.')

 

posted on 2017-10-11 11:21  啊峰哥  阅读(600)  评论(0编辑  收藏  举报

导航