Python实现 FTP文件上传下载

1、文件上传下载

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/7/7 8:49
# @Author  : 小梁同学@0311
# @File    : ftp上传下载.py
# @Software: PyCharm


from ftplib import FTP
import os.path

# 设置FTP连接信息
address = '127.0.0.1'
port = 21
# FTP用户名
user_name = 'root'
# FTP密码
password = 'liangyue@0311'

# 本地要上传的文件名
local_file_name = "local/test.xlsx"
# FTP中要下载的文件名
remote_file_name = "remote/test.xlsx"


# 将文件上传到FTP
def upload_file(local_file):
    try:
        ftp = FTP()
        ftp.connect(address, port)
        ftp.login(user_name, password)
        # 文件上传到FTP服务器的路径(前提是路径要存在,否则会报错)
        remote_path = "/"  # 如:将本地文件上传到FTP根目录
        ftp.cwd(remote_path)  # 切换到此路径
        file = open(local_file, 'rb')
        # 如果参数 pasv 为真,打开被动模式传输 (PASV MODE) ,否则,如果参数 pasv 为假则关闭被动传输模式。
        ftp.set_pasv(0)
        ftp.storbinary('STOR %s' % os.path.basename(local_file), file)
        file.close()
        ftp.close()
        print("文件上传完成")
    except Exception as e:
        print("文件上传失败...")
        print(str(e))


# 从FTP中下载文件到本地
def download_file(remote_file):
    try:
        # 创建ftp对象实例
        ftp = FTP()
        # 连接接FTP
        ftp.connect(address, port)
        # 通过账号和密码登录FTP服务器
        ftp.login(user_name, password)
        # 如果参数 pasv 为真,打开被动模式传输 (PASV MODE) ,否则,如果参数 pasv 为假则关闭被动传输模式。
        ftp.set_pasv(0)
        # 设置FTP上文件下载到本地的位置
        local_path = "local/"  # 如:将文件下载到当前程序所在目录中的local子目录中,也可以使用绝对路径
        # 为准备下载到本地的文件,创建文件对象(默认为远程下载的文件名,也可自定义)
        local_file = local_path + os.path.basename(remote_file)
        file = open(local_file, 'wb')
        # 从FTP服务器下载文件到前一步创建的文件对象,其中写对象为file.write,1024是缓冲区大小
        ftp.retrbinary('RETR ' + remote_file, file.write, 1024)
        # 关闭下载到本地的文件
        # 提醒:虽然Python可以自动关闭文件,但实践证明,如果想下载完后立即读该文件,最好关闭后重新打开一次
        file.close()
        # 关闭FTP客户端连接
        ftp.close()
        print("文件下载完成")
    except Exception as e:
        print("文件下载失败...")
        print(str(e))


if __name__ == '__main__':
    download_file(remote_file_name)

2、常用FTP命令

'''
Python FTP 操作
from ftplib import FTP      # 加载ftp模块
ftp = FTP()                 # 获取FTP对象
ftp.set_debuglevel(2)       # 打开调试级别2,显示详细信息
ftp.connect('IP', PORT) # 连接ftp,server和端口
ftp.login('user', 'password')  # 登录用户
print(ftp.getwelcome())     # 打印欢迎信息
ftp.cmd('xxx/xxx')          # 进入远程目录
bufsize = 1024              # 设置缓存区大小
filename='filename.txt'     # 需要下载的文件
file_handle=open(filename, 'wb').write   # 以写的模式在本地打开文件
file.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.rmd(dirname)            # 删除远程目录
ftp.pwd()                   # 返回当前所在位置
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文件
'''