下载数据
1> 以ASCII模式下载文件
from ftplib import FTP
localfile = open('filename','wt')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.retrlines('RETR remotefile',localfile.write)
以二进制模式下载文件
from ftplib import FTP
localfile = open('filename','wb')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.retrbinary('RETR remotefile',localfile.write)
以高级二进制模式下载文件
from ftplib import FTP
localfile = open('filename','wb')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.voidcmd('TYPE I') #表示以映像或二进制的模式传输
datasock,estsize = f.ntransfercmd('RETR remotefile') #返回一个tuple,包括数据的socket和数据的大小
while True:
buf = datasock.recv(2048)
if not buf:
break
localfile.write(buf)
datasock.close()
f.voidresp() #可以获得FTP服务器的响应,如果发现任何错误,就会报错
localfile.close()
上传数据
上传是通过两个基本的函数来实现的:storbinary()和storlines(),这两个基本函数分别调用一个指令,以及一个文件类型的对象来执行,其中storbinary()调用的是该对象的read(),而storlines()调用的是readlines()。这是跟下载函数不一样的,因为在下载中提供的是它本身的函数。
以二进制模式上传文件
from ftplib import FTP
localfile = open('filename','rb')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.storbinary('stor remotefile',localfile)
以文本模式上传文件
from ftplib import FTP
localfile = open('filename','rt')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.storlines('stor remotefile',localfile)
以高级二进制模式上传
from ftplib import FTP
localfile = open('filename','rb')
f = FTP('remoteADDR')
f.login('username','passwd') #为空表示匿名登录
f.voidcmd('TYPE I') #表示以映像或二进制的模式传输
datasock,esize = f.ntransfercmd('STOR localfile') #esize值为None,可自行设值
while True:
buf = fd.read(2048)
if not len(buf):
break
datasock.sendall(buf)
datacock.close()
localfile.close()
f.voidresp()
f.quit()
其它的操作
from ftplib import FTP
f = FTP('remoteADDR')
f.login('username','passwd')
1> 更改远程目录
f.cwd('remotepath')
2> 删除远程文件
f.delete('remotefile')
3> 删除远程目录(空目录)
f.rmd('remoteDIR')
4> 建立目录
f.mkd('remoteDIR')
5> 移动和重命名文件
f.rename('filename','newfilename')
如果在同一目录内,文件被重命名,如果目标是另外一个目录下的名字,文件被移动。
6> 返回远程目录列表
f.nlst()
7> tuple ftplib.all_errors 能捕捉所有可能发生的错误