Python中ftplib模块的使用
ftplib模块的主要接口
# from ftplib import FTP #加载ftp模块
# ftp=FTP() #设置变量
# ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
# ftp.set_debuglevel(0) #关闭调试模式
# ftp.connect("IP","port") #连接的ftp sever和端口
# ftp.login("user","password") #连接的用户名,密码
# ftp.getwelcome() #打印出欢迎信息
# ftp.cmd("xxx/xxx") #进入远程目录
# ftp.quit() #退出ftp,失败抛异常
# ftp.cwd(pathname) #设置FTP当前操作的路径
# ftp.dir() #显示目录下所有目录信息
# ftp.nlst() #获取目录下的文件
# ftp.mkd(pathname) #新建远程目录
# ftp.pwd() #返回当前所在位置
# ftp.rmd(dirname) #删除远程目录
# ftp.delete(filename) #删除远程文件
# ftp.rename(fromname, toname) #将fromname修改名称为toname。
# ftp.storbinary("STOR filename.txt",file_handel,bufsize) #上传目标文件
# ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件
# ftp.size(filename) #获取文件大小(字节)
# ftp.delete(filename) #删除服务器上的文件
上传和下载文件
import socket
from ftplib import FTP, error_perm def ftpconnect(host, port, username, password):
ftp = FTP()
ftp.set_debuglevel(0)
try:
ftp.connect(host, port)
ftp.login(username, password)
except (socket.error, socket.gaierror):
print("ERROR: cannot connect [{}:{}]" .format(host, port))
return None
except error_perm:
print("ERROR: user Authentication failed")
return None
except:
print("ERROR: Unknow")
return None
return ftp def downloadfile(ftp, remotepath, localpath):
bufsize = 1024
with open(localpath, 'wb') as fp:
ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize) def uploadfile(ftp, remotepath, localpath):
bufsize = 1024
with open(localpath, 'rb') as fp:
ftp.storbinary('STOR ' + remotepath, fp, bufsize) if __name__ == "__main__":
ftp = ftpconnect("192.180.180.100", 21, "admin", "zhongxing")
downloadfile(ftp, "/home/sd/NCP_AGENT", "NCP_AGENT")
ftp.quit()
思考:怎么获取文件传输过程中的进度
由于ftplib中的storbinary和retrbinary接口是阻塞式,返回值表示成功或失败。因此实时获取进度需要创建另外一个任务,如果是下载,实时进度可以使用已下载的文件大小除以总的文件大小;如果是上传,需要另启一个ftp连接,使用size接口获取上传文件的实时大小,然后除以上传文件的总大小即可得到实时进度。上述的方式比较麻烦,但是简单,不用修改源码,另一种方式是修改ftplib的源码,在每一帧的发送过程中做处理,使用全局变量传出即可。
Python中ftplib模块的使用的更多相关文章
- Python中optionParser模块的使用方法[转]
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
- 【转】关于python中re模块split方法的使用
注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...
- Python中的模块介绍和使用
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...
- python中导入模块的本质, 无法导入手写模块的解决办法
最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- Python中collections模块
目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...
- Python中pathlib模块
Python中pathlib模块 Path.cwd():返回当前目录的路径 Path.home():返回当前用户的家目录 Path.stat():返回此路径信息 Path.touch():创建文件 P ...
- Python 中包/模块的 `import` 操作
版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...
随机推荐
- 【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?
写在前面 在<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!>一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法.具体的 ...
- java异常处理之try_catch_finally
java异常处理之try_catch_finally 看下面的一个列子: public class TestException { int goabl=1; public TestException( ...
- python文件处理-根据csv文件内容,将对应图像拷贝到指定文件夹
内容涉及:文件遍历,读取csv指定列,拷贝文件,清理和创建文件 # -*- coding: utf-8 -*- import csv import os import sys import numpy ...
- Oracle数据库的闪回操作(查询指定时间的数据、恢复数据)
通过DELETE删除数据后相当于放入回收站,一般情况下可以找回:通过UPDATE更新数据后数据库也会保留数据快照.闪回就是恢复指定时间的数据快照以达到恢复数据的目的.根据步骤一查询出数据快照,恢复数据 ...
- (1)RabbitMQ简介与安装
1.RabbitMQ简介 因为RabbitMQ是基于开源的AMQP协议来实现的,所以在了解MQ时候,首先我们来了解下AMQP协议.AMQP,即Advanced Message Queuing Prot ...
- python-循环-两种方法实现九九乘法表
方法一:用最基本的while循环嵌套(基础时,便于理解) while循环的嵌套,先执行里边的,再执行外边的 i = 1 while i <= 9: j = 1 while j <= i: ...
- HTML文档解析和DOM树的构建
浏览器解析HTML文档生成DOM树的过程,以下是一段HTML代码,以此为例来分析解析HTML文档的原理 <!DOCTYPE html> <html lang="en&quo ...
- 【线型DP】【LCS】UVA_10635 Prince and Princess
嘤嘤嘤,我又来了,刚A完就写,这个沙雕题有丶恶心. ???时间4.11发现所有表情包都莫得了 题目: In an n×n chessboard, Prince and ...
- POJ1328贪心
题意:如今我们位于沿海地区,需要安装大炮,使得火力可以覆盖整个区域.海岸线可以视为是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.海洋里有若干个岛屿,每个小岛可以视为海洋中的一个点.我们需要在海 ...
- c++ 数字与字符串的相互转换
首先推荐用用C++的stringstream. 主要原因是操作简单. 0x00 字符串转数字 // zcj_14.cpp : //该程序是一个注册机,原理是对输入的字符每个与2求异或的结果取低位即为注 ...