如题,使用python3中ftplib模块实现将ftp服务器上的文件下载到本地。Demo如下:
import ftplib
import os
from pathlib import Path
import time
def ftpDownload(curTime):
host = r'ftp.xx.cn'
port = 21
user = '账号'
password = '密码'
LocalDir = 'data/FTP/%s' % curTime
RemoteDir = '/data/test/xxx'
ftp = ftplib.FTP()
ftp.connect(host, port)
ftp.login(user, password)
DownloadFileTree(LocalDir, RemoteDir, ftp)
ftp.close()
print("文件下载完成")
filePath = Path(LocalDir).rglob('*.txt')
ftpFile = next(filePath)
return ftpFile
# 下载单个文件
def DownloadFile(LocalFile, RemoteFile, ftp):
file_handler = open(LocalFile, 'wb')
print(file_handler)
ftp.retrbinary('RETR ' + RemoteFile, file_handler.write)
file_handler.close()
return True
# 下载整个目录下的文件
def DownloadFileTree(LocalDir, RemoteDir, ftp):
print("remoteDir:", RemoteDir)
if not os.path.exists(LocalDir):
os.makedirs(LocalDir)
ftp.cwd(RemoteDir)
# ftp.nlst()获取目录下的文件
RemoteNames = ftp.nlst()
print("RemoteNames", RemoteNames)
for file in RemoteNames:
Local = os.path.join(LocalDir, file)
print("正在下载", ftp.nlst(file))
if file.find(".") == -1:
if not os.path.exists(Local):
os.makedirs(Local)
DownloadFileTree(Local, file, ftp)
else:
DownloadFile(Local, file, ftp)
ftp.cwd("..")
return
if __name__ == '__main__':
curTime = time.strftime("%Y-%m-%d_%H-%M")
file = ftpDownload(curTime)
欢迎关注公众号: