Python连接ftp,并对FTP进行操作

#!usr/bin/env python
# -*- coding:utf-8 -*-
# 作用登录连接FTP,当无法连接时,显示错误代码,ftp.connect()和ftp.login()
# 可以了解FTP的环境搭建,了解ftp --help 即可
import ftplib
import os
import socket
from ftplib import FTP

import sys

reload(sys)
sys.setdefaultencoding('utf8')


ftp = FTP()
ftp.set_debuglevel(2)


def connect_ftp(host, port, timeout="10", user, passwd):
    try:
        # ftp.set_debuglevel(2)

        ftp.connect(host=host, port=port)  # ftp  connect函数的作用
        print ("*******已经成功连接'%s'服务器FTP服务!!!").decode("utf-8") % (host)
        print ftp.welcome
    except(socket.error, socket.gaierror), e:
        print ("错误:无法访问'%s'服务器FTP服务!!!%s").decode("utf-8") % (host, e)
        exit()
    try:
        ftp.login(user=user, passwd=passwd)  # ftp  login函数的作用
    except(ftplib.error_perm), e:
        print u"登录失败,请检查用户名和密码,错误代码%s" % (e)
        exit()


# 显示ftp指定目录下的文件,详细信息 ------- ftp.cat_dir()
def cat_dir(filepath):
    cat = ftp.dir(filepath)
    return cat


# 新建ftp下的目录,ftp目录下不存在此文件 ----- ftp.make_dir()
def make_dir(filepath):
    try:
        filepath.encode("utf-8")
        mkd = ftp.mkd(filepath)  # ftp.mkd() 创建目录
        return mkd

    except (ftplib.error_perm), e:
        print u"请查看目录下是否存在同名文件,异常为 %s" % (e)


def remove_dir(dirname):
    try:
        ftp.rmd(dirname)  # ftp.rmd() 删除目录
    except (ftplib.error_perm), e:
        print u"报错了tag:!!!目录已经被删除了 %s" % (e)


# 从FTP指定目录上下载文件,并保存到本地指定路径
def downloadfile(localpath, remotepath, filename):
    bufsize = 1024  # 设置缓冲区大小;
    # localpath="E:\迅雷下载\dday-collect-debug.apk"
    ulocalpath = unicode(localpath, "utf-8")
    try:
        # path=r"/upload/999.版本发布/debug/Version_debug_20170310_7"
        ftp.cwd(remotepath)
        # filename="dday-collect-debug.apk"   #需要下载的文件名
        filepath=ulocalpath+'/'
        file_handler = open(filepath+filename, "wb").write  # 以写模式打开本地文件,---需下载到本地的路径
        ##传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用
        ftp.retrbinary("RETR %s" % (filename), file_handler, bufsize)  # 接收服务器上文件并写入本地文件
    except (ftplib.error_perm), e:
        print u"请检查路径是否正确,是否有权限读取,错误代码%s" % (e)


def upload(localpath):
    bufsize = 8192
    ulocalpath = unicode(localpath, "utf-8")
    try:
        file_handler = open(ulocalpath, "rb")
        filename = os.path.split(ulocalpath)[-1]
        try:
            ftp.storbinary("stor %s" % (filename), file_handler, bufsize)
        except(ftplib.error_perm), e:
            print u"请检查上传路径是否正确,是否连接FTP,---错误代码%s" % (e)
    except:
        print u"请检查本地路径是否存在····"


# 获取指定目录下文件
def lst_file(path):
    #upath = unicode(path, "utf-8")
    # print os.path.split(ftp.nlst(path)[0])[0].decode("utf-8")
    s=[]
    try:
        for name in ftp.nlst(path):
            name1 = unicode(name, "utf-8")
            #print name1
            s.append(name1)
        return s

    except(ftplib.all_errors),e:
        print u"请检查目录是否正确,错误代码时-----%s"%(e)

def close():
    ftp.quit()

##################################

转自:https://blog.csdn.net/qq_30717683/article/details/68923618

猜你喜欢

转载自blog.csdn.net/qq_41262248/article/details/80733518
FTP