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 相关文章推荐
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
python字典的常用方法总结
Jul 31 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
Python使用Pandas库常见操作详解
Jan 16 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
详解python tkinter 图片插入问题
Sep 03 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php析构函数的简单使用说明
2015/08/24 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python函数的5种参数详解
2017/02/24 Python
Python reduce()函数的用法小结
2017/11/15 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python实现飞机大战微信小游戏
2020/03/21 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
女方婚礼新郎答谢词
2014/01/11 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
海飞丝广告词
2014/03/20 职场文书
军人离婚协议书样本
2014/10/21 职场文书
档案管理员岗位职责
2015/02/12 职场文书
毕业班工作总结
2015/08/10 职场文书
详解Python中__new__方法的作用
2022/03/31 Python