Python 基于Python实现Ftp文件上传,下载

简介: Python 基于Python实现Ftp文件上传,下载

基于Python实现Ftp文件上传,下载

 


测试环境:

Ftp客户端:Windows平台

Ftp服务器:Linux平台

Python版本:Python 2.7.6

 

实现功能:

支持FTP文件上传、下载,可以上传目录(分区除外),也可以上传单个文件;可以下载整个目录(/根目录除外),也可以下载单个文件

 

实践代码:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = 'shouke'

 

from ftplib import  FTP

import  ConfigParser

import os

 

class MyFTP:

   def __init__(self, ftp_conf):

       '''ftp服务器主机IP,端口等配置'''

       config = ConfigParser.ConfigParser()

       config.read(ftp_conf)

 

       self.ftp_host = config.get('FTP', 'ftp_host')

       self.ftp_port = config.get('FTP', 'ftp_port')

       self.ftp_user = config.get('FTP', 'ftp_user')

       self.ftp_passwd = config.get('FTP', 'ftp_passwd')

       self.ftp = FTP()

 

 

   def get_ftp_host(self):

       return self.ftp_host

 

   def get_ftp_port(self):

       return self.ftp_port

 

   def get_ftp_user(self):

       return self.ftp_user

 

   def get_ftp_passwd(self):

       return self.ftp_passwd

 

   # 连接到ftp服务器

   def connect(self):

       print('is connecting to ftp server %s on %s' % (self.ftp_host, self.ftp_port))

       self.ftp.connect(self.ftp_host, self.ftp_port)

 

   # 登陆到ftp服务器

   def login(self):

       print('ready to login ftp server')

       self.ftp.login(self.ftp_user, self.ftp_passwd)

       print('login ftp server successfully')

       print(self.ftp.getwelcome())

 

   # 友好的关闭连接

   def quit(self):

       try:

           self.ftp.quit()

           print('colose ftp connection successfully')

       except Exception as e:

           print('%s' % e)

 

   # 上传文件夹

   def upload_folder(self, local_path='../screenshot_lib', remote_path='/home/testacc'):

       if not os.path.isdir(local_path):

           print('出错了,请选择要上传的文件夹')

           return

       local_path = local_path.strip() # 以防万一,去除首尾空格

       local_path = local_path.rstrip('/') # 去除右部 /

       local_path = local_path.rstrip('\\') # 去除右部 \\

       remote_path = remote_path.strip()

       remote_path = remote_path.rstrip('/')

       remote_path = remote_path.rstrip('\\')

 

       self.ftp.cwd(remote_path)

 

       last_dir = os.path.basename(local_path)

       remote_path = os.path.join(remote_path, last_dir)

       remote_path = remote_path.replace('\\', '/') # 转为linux标准路径

       # 如果ftp服务器上不存在该路径,则创建对应路径下的目录

       try:

           self.ftp.mkd(last_dir)

       except:

           #print('dir: %s already exists' % last_dir)

           pass

 

       sub_items = os.listdir(local_path)

       for sub_item in sub_items:

           sub_item_path = os.path.join(local_path, sub_item)

           if os.path.isdir(sub_item_path): #如果子项目为目录

               self.upload_folder(sub_item_path, remote_path)

           else:

               self.upload_file(sub_item_path, remote_path)

 

   # 上传文件

   def upload_file(self, src_file_path, remote_path):

       remote_file_name = os.path.split(src_file_path)[1]

       remote_path = remote_path + '/' + remote_file_name

       try: #如果文件不存在,调用file.size(filename)会报错

           if self.ftp.size(remote_path) != None:

               print("文件%s已存在" % remote_path)

               return

       except Exception as e:

           pass

 

       with open(src_file_path, 'rb') as file_handler:

            self.ftp.storbinary('STOR %s' % remote_path , file_handler)

            print('文件:%s 已经上传到ftp' % src_file_path)

 

 

   # 下载目录

   def download_dir(self,local_path, remote_path):

       if os.path.isfile(local_path):

           print('出错了,请选择文件保存位置')

           return

       local_path = local_path.strip() # 以防万一,去除首尾空格

       remote_path = remote_path.strip()

       remote_path = remote_path.rstrip('/')

       remote_path = remote_path.rstrip('\\')

 

       last_dir = os.path.basename(remote_path)

       local_path = os.path.join(local_path, last_dir)

       local_path = local_path.replace('/', '\\') # 转为Windows标准路径

       # 如果本地客户端不存在该路径,则创建对应路径下的目录

       if not os.path.isdir(local_path):

           os.mkdir(local_path)

 

       sub_items = self.ftp.nlst(remote_path)

       for sub_item in sub_items:

           try:

               self.ftp.cwd(sub_item) #如果子项目为目录

               self.download_dir(local_path, sub_item)

           except Exception: # 非目录

               self.download_file(local_path, sub_item)

 

   def download_file(self, local_path, remote_file_path):

      if os.path.isdir(local_file_path):

           print('请选择文件保存目录路径')

           return

     


       last_file_name = os.path.split(remote_file_path)[1]

       local_file_path = os.path.join(local_path, last_file_name)

 

       if os.path.isfile(local_file_path):

           local_file_path = local_file_path.replace('\\', '/')

           print('文件:%s 已存在' % local_file_path)

           return

 

       with open(local_file_path, 'wb') as file_handle:

           self.ftp.retrbinary('RETR %s' % remote_file_path, file_handle.write)

 

if __name__ == '__main__':

   ftp = MyFTP('./config/ftp.conf')

   ftp.connect()

   ftp.login()

   ftp.upload_folder()

   ftp.upload_folder('E:\\dir1')

   # ftp.upload_folder('E:\\dir1\\')

   # ftp.upload_folder('E:/dir1/')

   # ftp.download_dir('E:\\', '/home/testacc')

   # ftp.download_dir('E:/', '/home/testacc')

   ftp.download_file('E:\\', '/home/testacc/testfile')

   ftp.quit()

 

ftp.conf配置如下:

[FTP]

ftp_host = 192.168.1.103

ftp_port = 21

ftp_user = testacc

ftp_passwd = testacc

 

测试数据如下:

 

 




pdf版本下载地址:基于Python实现Ftp文件上传,下载.pdf

目录
相关文章
|
13天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
55 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
15天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
40 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
15天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
46 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
125 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
2月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
59 20
|
4月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
4月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
5月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
安全 Shell 数据安全/隐私保护
python——脚本实现检测目标ip是否存在ftp笑脸漏洞(ftp后门漏洞)
vsftpd2.3.4中在6200端口存在一个shell,使得任何人都可以进行连接,并且VSFTPD v2.3.4 服务,是以 root 权限运行的,最终我们提到的权限也是root;当连接带有vsftpd 2.3.4版本的服务器的21端口时,输入用户中带有“:) ”,密码任意,因此也称为笑脸漏洞。
474 0
python——脚本实现检测目标ip是否存在ftp笑脸漏洞(ftp后门漏洞)
|
3月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!

热门文章

最新文章