Python 开发FTP文件传输程序
在计算机网络领域中,远程文件传输又是一个重要的分之。在计算机七层协议当中,TCP、FTP、Telnet、UDP可以实现远程文件处理。Python作为一门功能强大的开发语言,可以实现对远程文件的处理。
一、Python 和 FTP
当使用Python语言编写FTP客户端程序时,需要将相应的厍 ftplib 导入到项目程序中,然后实例化一个ftplib.FTP类对象,所有的FTP操作(如登录、传输文件和注销等)都要使用这个对象完成。使用类FTP可以创建一个FTP连接对象,具体语法格式如下所示。
FTP (host, user, passwd, acct)
● host: 要连接的FTP服务器,可选参数;
● user: 登录FTP服务器所使用的用户名,可选参数;
● passwd: 登录FTP服务器所使用的密码,可选参;
● acct: 可选参数,默认为空。
在内置模块 ftplib 的FTP类中,主要包含如下所示常用的方法。
(1)方法set_debuglevel()。
当创建一个FTP连接对象以后,可以使用方法set_debuglevel(设置调试级别。其原型如下:
set_debuglevel (level)
参数level是指调试级别,默认的调试级别为0。
(2)方法connect()。
如果在创建FTP连接对象时没有使用参数 host,则可以使用FTP对象中的方法 connect(),其原型如下:
connect (host,port,timeout,source-adolross)
● host: 要连接的FTP服务器;
● port: FTP服务器的端口,可选参数。
(3)方法login()。
如果在创建FTP对象时没有使用户名和密码,则可以通过FTP对象中的方法login()使用用户名和密码登录到FTP服务器。其原型如下:
login (user, passwd, acct)
● user: 登录FTP服务器所使用的用户名:
● passwd: 登录FTP服务器所使用的密码:
● acct: 可选参数,默认为空。
二、创建一个FTP文件传输客户端
在下面的实例中,演示了使用库ftplib创建一个简单的FTP文件传输客户端的过程。实例代码具体实现代码如下所示:
from ftplib import FTP #导入FTP
bufsize = 1024 #设置缓冲区的大小
def Get(filename): #定义函数Get()下载文件
command = 'RETR' + filename #变量command初始化
#下载FTP文件
ftp.retrbinary(command,open(filename,'wb').write,bufsize)
print('下载成功') #下载成功提示
def Put (filename): #定义函数Put()上传文件
command = 'STOR ' + filename #变量command初始化
filehandler = open(filename,'rb') #打开指定文件
ftp.storbinary (command, filehandler,bufsize) #实现文件上传操作
filehandler.close() #关闭连接
print('上传成功') #打印显示提示
def PWD(): #定义获取当前目录函数PWD()
print(ftp.pwd()) #返回当前所在位置
def Size(filename): #定义获取文件大小函数Size()
print(ftp.size(filename)) #显示文件大小
def Help(): #定义系统帮助函数Help()
print(''' #开始打印显示帮助提示
=============================================
simple Python FTP
=============================================
cd 进入文件夹
delete 删除文件
dir 获取当前文件列表
get 下载文件
help 帮助
mkdir 创建文件夹
put 上传文件
pwd 获取当前目录
rename 重命名文件
rmdir 删除文件夹
size 获取文件大小
''')
server = input('请输入FTP服务器地址:') #信息输入
ftp = FTP (server) #获取服务器地址
username = input('请输入用户名:') #输入用户名
password = input('请输入密码:') #输入密码
ftp.login(username,password) #使用用户名和密码登录ETP服务器
print(ftp.getwelcome()) #打印显示欢迎信息
#定义一个字典actions,在里面保存操作命令
actions = {'dir':ftp.dir,'pwd': PWD,'cd':ftp.cwd,'get':Get,
'put':Put,'help':Help,'rmdir':ftp.rmd,
'mkdir':ftp.mkd,'delete':ftp.delete,
'size':Size,'rename':ftp. rename}
while True: #执行循环操作
print('pyftp>') #打印显示提示符
cmds = input() #获取用户的输入
cmd = str.split (cmds) #使用空格分割用户输入的内容
try: #异常处理
if len(cmd) == 1: #验证输入命令中是否有参数
if str.lower(cmd[0]) == 'quit': #如果输入命令是quit则退出循环
break
else:
actions[str.lower(cmd[0])]() #调用与输出命令对应的操作函数
elif len(cmd) == 2: #处理只有一个参数的命令
actions[str.lower(cmd[0])](cmd[1]) #调用与输入命令对应的操作函数
elif len(cmd)== 3: #处理有两个参数的命令
actions[str.lower(cmd[0])](cmd[1],cmd[2]) #调用与输入命令对应的操作函数
else: #如果是其他情况
print('输入错误') #打印显示错误提示
except:
print('命令出错')
ftp.quit () #退出系统
运行上述实例代码后,会要求输入FTP服务器的地址、用户名和密码。如果输入上述信息正确则完成FTP服务器登录,并显示一个“pyftp>”提示符,等待用户输入命令。如果输入“dir" 和“pwd”这两个命令,会调用执行对应的命令操作函数。在测试运行本实例代码时,需要有一个FTP服务器及登录该服务器的用户名和密码。如果没有互联网中的FTP服务器,可以尝试在本地计算机中通过IIS配置一个FTP服务器,然后进行测试。