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.')