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文件
'''