首页 > Python > pytnon FTP编程-- ftplib 模块
2016
09-02

pytnon FTP编程-- ftplib 模块

 

pytnon FTP编程:Python自带ftplib 模块,是用来对FTP服务器进行上传、下载操作,非常方便,使用起来也是行简单。

 如果我们熟悉了下面代码编写,怎么把FTP服务器上的文件下载到本地,怎么把文件上传到FTP服务器上和批量FTP上传、下载

就基本掌握了Python FTP编程。

#-*- coding:utf-8 -*-
#author:lhj588@live.cn
#C_Date: 2011.11.17
from ftplib import FTP
import socket
import os
#ftp服务器地址
ftp_server = '127.0.0.1'
#ftp服务器端口
ftp_port ='5433'
#ftp服务器登录名称
user_name = 'lhj588'
#ftp服务器登录密码
password = '888888'

"""
描述:描述:简单FTP文件下载
"""
def upload_ftp():
    ftp = FTP()
    #打开调试级别2,显示详细信息
    ftp.set_debuglevel(2)
    #连接FTP服务器
    ftp.connect(ftp_server,ftp_port)
    #登录FTP服务器  如果匿名登录则用空串代替即可
    ftp.login(user_name,password)
    #显示FTP服务器欢迎信息
    print ftp.getwelcome()
    dir_name = "/mysoft/tool/"
    #选择要上传文件存放服务器的目录
    ftp.cwd(dir_name)
    #设置缓冲块大小
    buf_size = 1024
    #文件名称
    file_name = "test.jpg"
    #以写模式在本地打开文件
    f_handler = open(file_name,'wb').write()
    #接收FTP服务器上文件并写入本地
    ftp.retrbinary("RETR test.jpg",f_handler,buf_size)
    #关闭调试
    ftp.set_debuglevel(0)
    #退出FTP服务器
    ftp.quit()
"""
描述:简单FTP文件上传
"""
def down_ftp():
    ftp = FTP()
    #打开调试级别2,显示详细信息
    ftp.set_debuglevel(2)
     #连接FTP服务器
    ftp.connect(ftp_server,ftp_port)
    #登录FTP服务器  如果匿名登录则用空串代替即可
    ftp.login(user_name,password)
    print ftp.getwelcome()
    dir_name = "/mysoft/tool/"
    ftp.cwd(dir_name)
    buf_size = 1024
    file_name = 'test.jpg'
    #以读模式在本地打开文件
    f_handler = open(file_name,'rb')
    #上传文件
    ftp.storbinary('STOR server_test.jpg',f_handler,buf_size)
    #关闭调试
    ftp.set_debuglevel(0)
    #关闭文件
    f_handler.close()
    #退出FTP服务器
    ftp.quit()
"""
描述:登录到FTP站点:ftp_server,并到tarDirTemp目录下下载fileNameTempList列表中的文件
参数:ftp_server:ftp站点名称   user_name:ftp登录名   password:ftp密码
      tarDirTemp:下载的目标绝对目录   fileNameTempList:要下载的文件全名列表
返回值:输出:成功:0 失败:1
"""
def down_ftp_file(ftp_server, user_name, password, tarDirTemp,fileNameTempList):
    try:
        ftp = FTP(ftp_server)
        ftp.login(user_name, password) 
        ftp.cwd(tarDirTemp)
        ftp.set_debuglevel(2)
    except socket.error as errobj:
        print 'fpt error: %s can\'t download directory\'s file %s' % (errobj, tarDirTemp)
        return False
    for filename in fileNameTempList:
        try:
            #以写模式在本地打开文件
            fp = open(filename, 'wb')
            #从FTP中下载文件
            ftp.retrbinary('RETR '+filename, fp.write, 1024)
        except IOError as ioerr:
            print 'Error: [%s] %s' % (ioerr.errno, ioerr.strerror)
            return False
        except FTP.all_errors as errobj:
            print 'fpt error: [%s] %s' % (errobj, filename)
            if os.path.isfile(filename):
                os.system('rm -f ' + filename)
            continue
    ftp.close()
    return True
"""
描述:测试方法
"""
if __name__=="__main__":
    upload_ftp()
    down_ftp()
    down_ftp_file(ftp_server,user_name,password,"/mysoft/tool/",['1.jpg','2.jpg','3.jpg'])

 Python中的ftplib模块
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件
FTP的工作流程及基本操作可参考协议RFC959
ftp登陆连接
from ftplib import FTP #加载ftp模块
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password")#连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #更改远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) #关闭调试模式
ftp.quit #退出ftp
ftp相关命令操作
ftp.cwd(pathname) #设置FTP当前操作的路径
ftp.dir() #显示目录下文件信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件

其他例子:

# 例:FTP编程  

from ftplib import FTP  

      

ftp = FTP()  

timeout = 30  

port = 21  

ftp.connect('192.168.1.188',port,timeout
) # 连接FTP服务器  

ftp.login('UserName','888888'
) # 登录  

print 
ftp.getwelcome
()  # 获得欢迎信息   

ftp.cwd('file/test'
)    # 设置FTP路径  

list = 
ftp.nlst
()       # 获得目录列表  

for name in list:  

    print(name)             # 打印文件名字  

path = 'd:/data/' + name    # 文件保存路径  

f = open(path,'wb')         # 打开要保存文件  

filename = 'RETR ' + name   # 保存FTP文件  

ftp.retrbinary(filename,f.write
) # 保存FTP上的文件  

ftp.delete(name
)            # 删除FTP文件  

ftp.storbinary('STOR
 '+filename, open(path, 'rb')) # 上传FTP文件  

ftp.quit
()                  # 退出FTP服务器
#!/usr/bin/python  

# -*- coding: utf-8 -*-  

import ftplib  

import os  

import socket  

  

HOST = 'ftp.mozilla.org'  

DIRN = 'pub/mozilla.org/webtools'  

FILE = 'bugzilla-3.6.7.tar.gz'  

def main():  

    try:  

        f = ftplib.FTP(HOST)  

    except (socket.error, socket.gaierror):  

        print 'ERROR:cannot reach " %s"' % HOST  

        return  

    print '***Connected to host "%s"' % HOST  

  

    try:  

        f.login()  

    except ftplib.error_perm:  

        print 'ERROR: cannot login anonymously'  

        f.quit()  

        return  

    print '*** Logged in as "anonymously"'  

    try:  

        f.cwd(DIRN)  

    except ftplib.error_perm:  

        print 'ERRORL cannot CD to "%s"' % DIRN  

        f.quit()  

        return  

    print '*** Changed to "%s" folder' % DIRN  

    try:  

        #传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用  

        f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)  

    except ftplib.error_perm:  

        print 'ERROR: cannot read file "%s"' % FILE  

        os.unlink(FILE)  

    else:  

        print '*** Downloaded "%s" to CWD' % FILE  

    f.quit()  

    return  

  

if __name__ == '__main__':  

    main()

 

作者:admin
admin
TTF的家园-www.ttfde.top 个人博客以便写写东西,欢迎喜欢互联网的朋友一起交流!

本文》有 0 条评论

留下一个回复