Python实现FTP文件下载:从远程获取图片到本地服务器
本文介绍如何使用Python的ftplib模块从FTP服务器下载文件至本地。通过封装FTP_OP类,实现连接、登录及文件下载功能。重点解析os.path.join路径处理及主动/被动模式配置,提供可直接修改账号密码和目录的完整代码示例,解决批量获取远程图片的需求。
近期遇到一个实际需求,需要将合作方提供的FTP地址上的图片批量获取并存储到本地服务器。起初考虑使用Shell脚本,因为Shell原生支持FTP命令,配合for循环也能实现目标。但最终决定采用Python进行操作。在网络上搜索相关方案时,发现多数示例无法直接复用,因此基于现有代码进行了修改和完善。在此过程中积累了一些实用经验,具体操作代码如下:只需替换代码中的FTP账号、密码及对应目录路径,即可直接运行使用。
在编写代码时,需要特别注意os.path.join函数的正确用法,以确保本地文件路径拼接无误。
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
FTP常用操作
"""
from ftplib import FTP
import os
class FTP_OP(object):
def __init__(self, host, username, password, port):
"""
初始化ftp
:param host: ftp主机ip
:param username: ftp用户名
:param password: ftp密码
:param port: ftp端口 (默认21)
"""
self.host = host
self.username = username
self.password = password
self.port = port
def ftp_connect(self):
"""
连接ftp
:return:
"""
ftp = FTP()
ftp.set_debuglevel(1) # 不开启调试模式
ftp.connect(host=self.host, port=self.port) # 连接ftp
ftp.login(self.username, self.password) # 登录ftp
ftp.set_pasv(False)##ftp有主动 被动模式 需要调整
return ftp
def download_file(self, ftp_file_path, dst_file_path):
"""
从ftp下载文件到本地
:param ftp_file_path: ftp下载文件路径
:param dst_file_path: 本地存放路径
:return:
"""
buffer_size = 102400 #默认是8192
ftp = self.ftp_connect()
print(ftp.getwelcome() ) #显示登录ftp信息
file_list = ftp.nlst(ftp_file_path)
for file_name in file_list:
print("file_name"+file_name)
ftp_file = os.path.join(ftp_file_path, file_name)
print("ftp_file:"+ftp_file)
#write_file = os.path.join(dst_file_path, file_name)
write_file = dst_file_path+file_name ##在这里如果使用os.path.join 进行拼接的话 会丢失dst_file_path路径,与上面的拼接路径不一样
print("write_file"+write_file)
if file_name.find('.png')>-1 and not os.path.exists(write_file):
print("file_name:"+file_name)
#ftp_file = os.path.join(ftp_file_path, file_name)
#write_file = os.path.join(dst_file_path, file_name)
with open(write_file, "wb") as f:
ftp.retrbinary('RETR %s' % ftp_file, f.write, buffer_size)
#f.close()
ftp.quit()
if __name__ == '__main__':
host = "192.168.110.**"
username = "****"
password = "****"
port = 21
ftp_file_path = "/erp-mall/" #FTP目录
dst_file_path = "/root/11" #本地目录
ftp = FTP_OP(host=host, username=username, password=password, port=port)
ftp.download_file(ftp_file_path=ftp_file_path, dst_file_path=dst_file_path)
以上就是Python从FTP获取文件并下载到本地的完整实现方案,更多关于Python FTP下载文件的详细资料,欢迎查阅本站其他相关文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













