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连接mysql并提交mysql事务示例
Mar 05 Python
Python简单删除目录下文件以及文件夹的方法
May 27 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Django URL参数Template反向解析
Nov 24 Python
Python实现制作销售数据可视化看板详解
Nov 27 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
我的论坛源代码(十)
2006/10/09 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
Three.js基础部分学习
2017/01/08 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
js的对象与函数详解
2019/01/21 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
进一步了解Python中的XML 工具
2015/04/13 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
密封类可以有虚函数吗
2014/08/11 面试题
史学专业毕业生求职信
2014/05/09 职场文书
小学生倡议书范文
2014/05/13 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
安全环保标语
2014/06/09 职场文书
班级课外活动总结
2014/07/09 职场文书
转学证明范本
2015/06/19 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python