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迭代器和生成器介绍
Mar 06 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python使用爬虫猜密码
Feb 19 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Python数据类型之Number数字操作实例详解
May 08 Python
python join方法使用详解
Jul 30 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
通过代码实例了解Python异常本质
Sep 16 Python
python playwright 自动等待和断言详解
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
PHP经典的给图片加水印程序
2006/12/06 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
js获取ip和地区
2017/03/10 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
python逆序打印各位数字的方法
2018/06/25 Python
Python 判断奇数偶数的方法
2018/12/20 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python简易版图书管理系统
2019/08/12 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
python数字类型math库原理解析
2020/03/02 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
保护环境建议书400字
2014/05/13 职场文书
求职简历自我评价2015
2015/03/10 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle