首页 > Python网络编程 阅读数:3

Python ftplib模块:实现FTP文件传输

FTP(File Transfer Protocol)是一种在网络上传输文件的普遍方式,因为在大部分的操作系统上都有客户端的FTP与服务器端的FTP服务。服务器端的 FTP 可以同时供私有(private)用户与匿名(anonymous)用户使用。

私有的服务器端 FTP 只允许系统用户进行连接,匿名的服务器端 FTP 不需账号即可连接网络传输文件。使用匿名的服务器端 FTP 会产生安全性的问题。

FTP 提供一个控制端口与一个数据端口,在服务器端与客户端之间的数据传输使用独立的 socket,以避免死机的问题。

Python 中默认安装的 ftplib 模块定义了 FTP 类,可以用于创建一个 FTP 连接,以上传或下载文件。FTP 类的语法如下:

class FTP([host [, user [, passwd [, acct]]]])

其中,host 是主机名称;user 是用户账号;passwd 是用户密码。 下面是 FTP 类的使用流程和各种方法的含义。
#加载ftp模块
from ftplib import FTP
#设置变量
ftp=FTP()
#打开调试级别2,显示详细信息
ftp. set_debuglevel (2)
#连接的ftp sever 和端口
ftp. connect("服务器IP",'端口号')
#连接的用户名和密码
ftp. login ("user", "password")
#打印出欢迎信息
print (ftp. getwelcome () )
#更改远程目录
ftp.cmd ("XXX/XXX")
#设置的缓冲区大小
bufsize=1024
#需要下载的文件
filename=" filename.txt"
#以写模式在本地打开文件
filehandle=open ( filename, "wb") . write
#接收服务器上文件并写入本地文件
ftp.retrbinaly ("RETR filename.txt",file_handle, bufsize)
#关闭调试模式
ftp.set_debuglevel (0)
#退出ftp
ftp.quit
FTP 相关命令的含义如下:
#设置FTP当前操作的路径
ftp .cwd (pathname)
#显示目录下文件信息
ftp.dir ()
#获取目录下的文件
ftp.nlst ()
#新建远程目录
ftp.mkd (pathname)
#返回当前所在位置
ftp.pwd()
#删除远程目录
ftp.rmd (di rname)
#删除远程文件
ftp.delete (filename)
#将fromname修改名称为toname。
ftp.rename ( fromname, toname)
#_上传目标文件
ftp.storbinaly ("STOR filename.txt", file_handel, bufsize)
#下载FTP文件
ftp.retrbinary ("RETR filename.txt", file_handel,bufsize)

下面通过一个综合示例来讲解 ftplib 模块的使用方法和技巧。
#上传FTP文件
from ftplib import FTP
ftp = FTP()
timeout = 30
port = 21
#连接FTP服务器
ftp. connect (' 192.168.1.106',port, timeout)
#登录FTP服务器
ftp. login( 'adminns', '123456')
#获得欢迎信息
print (ftp. getwelcome () )
#设置FTP路径
ftp.cwd( 'file/test')
#获得目录列表
list = ftp.nlst ()
#打印文件名字
for name in list :
    print (name)
    #文件保存路径
    path = 'd: /data/' + name
    #打开要保存的文件
    f = open(path, 'wb')
    #保存FTP文件
    filename = 'RETR' + name
#保存FTP上的文件
    ftp. retrbinary (filename, f.write)
#删除FTP文件
    ftp. delete (name)
#上传FTP文件
    ftp. storbinary(' STOR '+filename, open (path,'rb') )
#退出FTP服务器
ftp.quit ()