import os
import sys
from ftplib import FTP
class FTPClient(FTP):
""" FTP 客户端 """
def ftplogin(self, host, port, username, password):
""" 登录 """
self.connect(host, port)
self.login(username, password)
def downloadfile(self, remotepath, localpath=None):
""" 下载文件 """
bufsize = 1024
if localpath is None:
localpath = os.path.basename(remotepath)
fp = open(localpath, 'wb')
self.retrbinary('RETR ' + remotepath, fp.write, bufsize)
self.set_debuglevel(0)
fp.flush()
fp.close()
print('文件 %s 下载成功!'%remotepath)
def uploadfile(self, localpath, remotepath=None):
""" 上传文件 """
bufsize = 1024
# self.cwd("/td")
if remotepath is None:
remotepath = os.path.basename(localpath)
# os.path.abspath()
fp = open(localpath, 'rb')
self.storbinary('STOR ' + remotepath, fp, bufsize)
self.set_debuglevel(0)
fp.close()
print('文件%s上传成功!'%localpath)
def uploadfolder(self, localpath):
""" 上传文件夹 """
bufsize = 1024
_fold = os.path.basename(localpath)
try:
self.mkd(_fold)
except Exception as exc:
if 'exists' in str(exc):
cz = input('目录 %s 已经存在,是否覆盖其所有文件(Y/N):'%_fold)
if cz != 'Y':
return
self.cwd(_fold)
next_fold = []
for i in os.listdir(localpath):
_f = os.path.join(localpath, i)
if os.path.isfile(_f):
fp = open(_f, 'rb+')
self.storbinary('STOR ' + i, fp, bufsize)
self.set_debuglevel(0)
fp.close()
elif os.path.isdir(_f):
next_fold.append((_fold, _f))
for j, i in next_fold:
v = self.pwd().split('/')
if j != v[-1]:
self.cwd('../')
self.uploadfolder(i)
self.cwd("/")
print('文件夹%s上传成功!'%localpath)
if __name__ == '__main__':
src_host="xxx"
src_port=21
src_user="xx"
src_password="xx"
srcFTP=FTPClient()
srcFTP.ftplogin(src_host, src_port, src_user, src_password)
# 下载文件
srcFTP.downloadfile("a.txt","/data/sde/a.txt") # 下载文件
srcFTP.quit()
host = 'xxxx' # IP
port = 21 # 端口
user = 'xx' # 用户名
password = 'xx' # 密码
ftp = FTPClient()
ftp.ftplogin(host, port, user, password) # 登录
ftp.uploadfile("/data/sde/a.txt", "a.txt")
ftp.quit()
python ftp操作
最新推荐文章于 2024-05-27 14:50:58 发布
本文介绍了一个使用Python实现的FTP客户端类,包含ftp_login、download_file、upload_file和upload_folder方法,展示了如何通过FTP进行文件的上传和下载操作,适用于Python开发者进行网络文件交互。
摘要由CSDN通过智能技术生成