python ftplib模块使用代码实例


Posted in Python onDecember 31, 2019

这篇文章主要介绍了python ftplib模块使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Python中默认安装的ftplib模块定义了FTP类,可用来实现简单的ftp客户端,用于上传或下载文件。

ftp登陆连接

from ftplib import FTP # 加载ftp模块

ftp = FTP() # 设置变量
ftp.set_debuglevel(2) # 打开调试级别2,显示详细信息
ftp.connect("10.126.64.14", 21) # 连接的ftp sever和端口
ftp.login("usr_esop", "PWD4ftp@201903#") # 连接的用户名,密码
print(ftp.getwelcome()) # 打印出欢迎信息
ftp.cwd("/ZS_ESOP/55-548410/-/zh/Split") # 更改远程目录
bufsize = 1024 # 设置的缓冲区大小
filename = "tslint.json" # 需要下载的文件
file_handle = open(filename, "wb").write # 以写模式在本地打开文件
ftp.retrbinary("RETR tslint.json", file_handle, bufsize) # 接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) # 关闭调试模式
ftp.quit # 退出ftp

ftp相关命令操作

ftp.cwd(pathname) #设置FTP当前操作的路径,cwd可以使用“..”,但不使用"./path"以及"../path"这样的相对路径
ftp.dir() #显示目录下文件信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。可以带路径,起到移动文件的作用
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #以BINARY模式上传目标文件ftp.storlines("STOR filename.txt",file_handel) #以ASCII模式存储文件ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#以BINARY模式下载FTP文件FTP.retrlines("RETR filename.txt",file_handel) #以ASCII模式获取文件或者文件夹列表

FTP.quit()与FTP.close()的区别

  • FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
  • FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。

下载、上传文件

from ftplib import FTP


def ftpconnect(host, username, password):
  ftp = FTP()
  # ftp.set_debuglevel(2)     #打开调试级别2,显示详细信息  ftp.encoding = 'GB2312' # 解决中文编码问题,默认是latin-1,如果将 encoding='utf-8'报错,可以 改为GB2312、gbk、ISO-8859-1  ftp.connect(host, 21) # 连接
  ftp.login(username, password) # 登录,如果匿名登录则用空串代替即可
  return ftp


def downloadfile(ftp, remotepath, localpath):
  bufsize = 1024 # 设置缓冲块大小
  fp = open(localpath, 'wb') # 以写模式在本地打开文件
  ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize) # 接收服务器上文件并写入本地文件
  ftp.set_debuglevel(0) # 关闭调试
  fp.close() # 关闭文件


def uploadfile(ftp, remotepath, localpath):
  bufsize = 1024
  fp = open(localpath, 'rb')
  ftp.storbinary('STOR ' + remotepath, fp, bufsize) # 上传文件
  ftp.set_debuglevel(0)
  fp.close()# 关闭文件


if __name__ == "__main__":
  ftp = ftpconnect("******", "***", "***")
  downloadfile(ftp, "***", "***")
  uploadfile(ftp, "***", "***")

  ftp.quit()

上传、下载文件/目录

注:目录内为文件,若为目录则无法传输

import os
import ftplib


class myFtp:
  ftp = ftplib.FTP()
  bIsDir = False
  path = ""

  def __init__(self, host, port='21'):
    # self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 
    # self.ftp.set_pasv(0)   #0主动模式 1 #被动模式    self.ftp.encoding = 'GB2312' # 解决中文编码问题,默认是latin-1,如果将 encoding='utf-8'报错,可以 改为GB2312、gbk、ISO-8859-1    self.ftp.connect(host, port)

  def login(self, user, passwd):
    self.ftp.login(user, passwd)
    print(self.ftp.welcome)

  def down_load_file(self, local_file, remote_file):
    file_handler = open(local_file, 'wb')
    self.ftp.retrbinary("RETR %s" % remote_file, file_handler.write)
    file_handler.close()
    return True

  def up_load_file(self, local_file, remote_file):
    if not os.path.isfile(local_file):
      return False
    file_handler = open(local_file, "rb")
    self.ftp.storbinary('STOR %s' % remote_file, file_handler, 4096)
    file_handler.close()
    return True

  def up_load_file_tree(self, local_dir, remote_dir):
    if not os.path.isdir(local_dir):
      return False
    # print("local_dir:", local_dir)
    local_names = os.listdir(local_dir)
    # print("list:", local_names)
    # print(remote_dir)
    self.ftp.cwd(remote_dir)
    for Local in local_names:
      src = os.path.join(local_dir, Local)
      if os.path.isdir(src):
        self.up_load_file_tree(src, Local)
      else:
        self.up_load_file(src, Local)

    self.ftp.cwd("..")
    return

  def down_load_file_tree(self, local_dir, remote_dir):
    print("remote_dir:", remote_dir)
    if not os.path.isdir(local_dir):
      os.makedirs(local_dir)
    self.ftp.cwd(remote_dir)
    remote_names = self.ftp.nlst()
    # print("remote_names", remote_names)
    # print(self.ftp.nlst(remote_dir))
    for file in remote_names:
      local = os.path.join(local_dir, file)
      if self.is_dir(file):
        self.down_load_file_tree(local, file)
      else:
        self.down_load_file(local, file)
    self.ftp.cwd("..")
    return

  def show(self, list):
    result = list.lower().split(" ")
    if self.path in result and "<dir>" in result:
      self.bIsDir = True

  def is_dir(self, path):
    self.bIsDir = False
    self.path = path
    # this ues callback function ,that will change bIsDir value
    self.ftp.retrlines('LIST', self.show)
    return self.bIsDir

  def close(self):
    self.ftp.quit()
if __name__ == "__main__":
  ftp = myFtp('10.126.64.14',21)
  ftp.login("usr_esop", "PWD4ftp@201903#")

  ftp.down_load_file_tree(r"C:\PycharmProjects\untitled\backup", "/ZS_ESOP/55-548410/-/zh/Split") # ok
  ftp.up_load_file_tree(r"C:\PycharmProjects\untitled\backup", "/ZS_ESOP/55-548410/-/zh/Split") # ok
  ftp.close()
  print("ok!")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python类继承用法实例分析
May 27 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
python导入模块交叉引用的方法
Jan 19 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python基于递归解决背包问题详解
Jul 03 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Python中zip()函数的简单用法举例
Sep 02 Python
flask开启多线程的具体方法
Aug 02 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
浅谈Python项目的服务器部署
Apr 25 Python
深入了解如何基于Python读写Kafka
Dec 31 #Python
Python面向对象之继承原理与用法案例分析
Dec 31 #Python
pytorch中nn.Conv1d的用法详解
Dec 31 #Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 #Python
Pytorch之卷积层的使用详解
Dec 31 #Python
Python中bisect的使用方法
Dec 31 #Python
pytorch中tensor张量数据类型的转化方式
Dec 31 #Python
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python中协程用法代码详解
2018/02/10 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
用python实现名片管理系统
2020/06/18 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
关爱留守儿童倡议书
2014/04/15 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
Golang Web 框架Iris安装部署
2022/08/14 Python