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 04 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
python实现二叉查找树实例代码
Feb 08 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
Python函数返回不定数量的值方法
Jan 22 Python
pytorch使用Variable实现线性回归
May 21 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
Python Numpy之linspace用法说明
Apr 17 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安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
RequireJs的使用详解
2017/02/19 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
使用Python来开发微信功能
2018/06/13 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
节水标语大全
2014/06/11 职场文书
中秋节慰问信
2015/02/15 职场文书
大学班干部竞选稿
2015/11/20 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python