python ftplib_python:使用ftplib编写FTP客户端

Python中的ftplib模块

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件

FTP的工作流程及基本操作可参考协议RFC959

ftp登陆连接

from ftplib import FTP #加载ftp模块

ftp=FTP() #设置变量

ftp.set_debuglevel(2) #打开调试级别2,显示详细信息

ftp.connect("IP","port") #连接的ftp sever和端口

ftp.login("user","password")#连接的用户名,密码

print ftp.getwelcome() #打印出欢迎信息

ftp.cmd("xxx/xxx") #更改远程目录

bufsize=1024 #设置的缓冲区大小

filename="filename.txt" #需要下载的文件

file_handle=open(filename,"wb").write #以写模式在本地打开文件

ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件

ftp.set_debuglevel(0) #关闭调试模式

ftp.quit #退出ftp

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.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件

ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件

自己写的FTP下载客户端,如果需要上传客户端,请修改下就可以了。#!/usr/local/bin/python2.7

# -*- coding: utf-8 -*-

'''

使用ftplib编写FTP客户端连接,并指定目录下载。

'''

__author__ = 'sunday208'

__date__ ="2016-02-25 12:50"

import ftplib ,socket

from sys import exit

import os

class DOFTP():

def __init__(self):

#定义公用变量

self.RED_COLOR='\033[1;31;48m'  #红 ,配置终端输出的颜色

self.BLUE_COLOR='\033[1;34;48m'  #红 ,配置终端输出的颜色

self.RES='\033[0m'

def FTP_DOWN(self,HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir):

MyFTP = ftplib.FTP()

try:

MyFTP.connect(host=HostIP,port=SerPort,timeout=5)

print '%s*****已经成功连接"%s"服务器FTP服务!%s' % (self.BLUE_COLOR,HostIP,self.RES)

except (socket.error, socket.gaierror), e:

print '%s错误:无法访问"%s" FTP服务,请检查!错误代码为"%s"%s' % (self.RED_COLOR,HostIP,e,self.RES)

exit()

try:

MyFTP.login(user=FtpUser,passwd=FtpPasswd)

print '%s*****已经成功登陆"%s"服务器FTP服务!%s' % (self.BLUE_COLOR,HostIP,self.RES)

print MyFTP.getwelcome()#显示ftp服务器欢迎信息

except (ftplib.error_perm), e:

print '%s错误:登陆失败!,请检查用户名"%s“密码"%s"是否正确!错误代码为"%s"%s' % (self.RED_COLOR,FtpUser,FtpPasswd,e,self.RES)

exit()

MyFTP.cwd(RootDir) #进入FTP目录

FTP_files = MyFTP.nlst()   #取FTP当前目录内容

if not Server_files:  #如果要下载为空,将下载该目录全部内容

DownLists = FTP_files

print "FTP全部目录%s"% DownLists

else:

#判断指定下载的文件是否在FTP目录中。

DownLists = []   #下载列表

NODownLists =[]  #没有下载列表

for line in Server_files:

if line in FTP_files:

DownLists.append(line)

else:

NODownLists.append(line)

if NODownLists:

print "%s在FTP服务器并没有指定文件%s。%s"% (self.RED_COLOR,",".join(NODownLists),self.RES)

if DownLists:

print "%s正在从FTP服务器下载如下文件%s。%s"% (self.BLUE_COLOR,",".join(DownLists),self.RES)

bufsize = 1024

for line in DownLists:

FileName = open(Local_dir + line,'wb').write

MyFTP.retrbinary('RETR %s' % os.path.basename(line),FileName,bufsize)

MyFTP.quit()

print "%sFTP已经成功退出。%s"% (self.BLUE_COLOR,self.RES)

if __name__ == "__main__":

HostIP='XXXXX'   #FTP服务器IP或者域名

SerPort='21'      #FTP端口

FtpUser='ftpuser'   #FTP用户

FtpPasswd='XXXXXX' #FTP对应用户密码

RootDir='/test'   #FTP目录

Server_files = ['1.txt','2.txt','3.txt','4.txt']  #下载服务器文件列表

#Server_files = [] #如果要下载为空,将下载该目录全部内容

Local_dir ="D:/testtmp/downfile/"  #本地目录

#Local_files =['a.txt','b.txt']  #上传服务器本地文件列表

s = DOFTP()

if os.path.exists(Local_dir)== False:  #判断本地是否有该文件目录,如果没有,将创建

try:

os.mkdir(Local_dir)

print "%s创建本地目录'%s'%s"% (s.BLUE_COLOR,Local_dir,s.RES)

except:

print "%s无法创建本地目录'%s',原因是无该盘符或者目录路径有问题,程序直接退出!%s"% (s.RED_COLOR,Local_dir,s.RES)

exit() #退出程序

s.FTP_DOWN(HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir)

执行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、uniapp项目(分段器的使用、scroll-view、视频下载、转发)

一、分段器组件的使用 uniapp官方文档 <template><view class"category"><view class"category_tab"> <view class"category_tab_title"><view class"title_inner"><uni-segmented-control :curr…

HTTP 请求头中的 X-Forwarded-For

本文转载自https://imququ.com/post/x-forwarded-for-header-in-http.html 我一直认为&#xff0c;对于从事 Web 前端开发的同学来说&#xff0c;HTTP 协议以及其他常见的网络知识属于必备项。一方面&#xff0c;前端很多工作如 Web 性能优化&#xff0c;大部分规则都跟 HTTP、…

【Bash/Shell】知识总结

文章目录 1. 总体认识1.1. Shell概述1.2. 第一个Shell脚本1.3. 注释 2. 变量2.1. 定义变量2.2. 使用变量2.3. 只读变量2.4. 删除变量2.5. 变量类型2.5.1. 字符串变量2.5.2. 整数变量2.5.3. 数组变量2.5.4. 环境变量2.5.5. 特殊变量 3. 输出3.1. echo命令3.2. printf命令 4. 运算…

problem b: 一年中的第几天_第九届蓝桥杯B组试题

1.标题&#xff1a;第几天2000年的1月1日&#xff0c;是那一年的第1天。那么&#xff0c;2000年的5月4日&#xff0c;是那一年的第几天&#xff1f;注意&#xff1a;需要提交的是一个整数&#xff0c;不要填写任何多余内容。“手动分割”大小月判断&#xff1a;https://jingyan…

一、express 路由 todos案例

一、express路由 动态路由参数 params 路径参数 query 二、 todos案例 2.1 准备工作 新建一个文件夹01-demo执行npm init -y 生成package.json配置文件执行npm install express --save 安装express新建app.js文件&#xff0c;这是程序的入口文件新建db.json文件&#xff0…

Spiral Matrix I II

Spiral Matrix I Given an integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order. Example Given n 3, You should return the following matrix: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ] ]分析&#xff1a;从上&#xff0c;右&#xff0c…

二、express中间件

一、中间件引入 实现加入日志模块功能&#xff1a; 1. 我们能想到的方案&#xff1a; 将日志输出代码封装到函数中&#xff0c;然后需要日志输出的地方调用这个函数即可。 app.js文件&#xff1a; const express require(express)const app express()const myLogger (r…

移动端中如何检测设备方向的变化?

除非你的应用程序限定了只在移动设备直立状态或水平状态下使用&#xff0c;一般情况下&#xff0c;你需要调整一些设定。即便你设计的布局流畅时尚&#xff0c;你可能需要改变某些编程代码。通常有以下一些小的策略用于检测移动设备方向的改变。 orientationchange事件 你等待一…

python函数名与变量名可以一样吗_python--第一类对象,函数名,变量名

一 . 第一类对象函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用可以作为返回值返回 , 可以作为参数进行传递def func():def people():print(金_卡戴珊)print(oh,yes!)print(oh,baby!)return peopleret func()ret()二 . 闭包闭包 -> 函数的嵌套内层函数对外…

Mac Pro 修改环境变量

参考&#xff1a;Ubuntu 12 修改环境变量 【实战】 把 php、php-fpm、nginx、mysql 的相关命令路径添加到 用户环境变量 $ vim ~/.bash_profile alias llls -alF alias lals -A alias lls -CFexport GOROOT/usr/local/go export GOPATH/Users/jianbao/GoProjects/go-studyexpor…

三、Express 路由

一、路由 路由是指应用程序的端点(URI)如何响应客户端请求. 你可以使用app与HTTP方法相对应的Express对象的方法来定义路由. 例如,app.get()处理GET请求和app.post POST 请求。 你还可以使用app.all()处理所有HTTP方法,并使用app.use()将中间件指定为回调函数. 这些路由方法…

python程序操作的核心_python核心编程-第五章-个人笔记

1.用del删除对对象的引用>>> a 123>>>a123>>> dela>>>aTraceback (most recent call last):File"", line 1, in NameError : namea is not defined2.整型(1)布尔型 该类型取值范围只要两个值&#xff1a;布尔值True 和 布尔…

辅助同步器

java除了提供锁之外&#xff0c;还提供了一些辅助的同步器。 一、CountDownLatch 作用&#xff1a;常常要有一个线程&#xff08;master&#xff09;做汇总&#xff0c;等n个子步骤&#xff08;线程slave&#xff09;完成后才能继续操作。用join写只能等子线程完成&#xff0c;…

RESTful 接口设计规范

一、RESTful 接口设计规范 1. 协议 API与用户的通信协议&#xff0c;尽量使用HTTPs协议。 2. 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 如果确定API很简单&#xff0c;不会有进一步扩展&#xff0c;可以考虑放在主域名下。 https://example.org/ap…

是引进外部函数吗_使用PowerBI的这两个函数,灵活计算各种占比

计算个体占总体的比例是一个很常见的分析方式&#xff0c;它很简单&#xff0c;就是两个数字相除&#xff0c;但是当需要计算的维度、总体的范围发生动态变化时&#xff0c;如何灵活且快速的计算出各种占比&#xff0c;还是需要动一点心思的。本文就通过 DAX 中的 ALL 和 ALLSE…

WCF入门(五)---创建WCF服务

使用Microsoft Visual Studio2012创建WCF服务&#xff0c;理解如下所有必要的编码&#xff0c;更好地创建WCF服务的概念&#xff0c;这里做一个简单的任务。 启动Visual Studio 2012。 单击新建项目&#xff0c;然后在Visual C&#xff03;标签&#xff0c;选择WCF选项。 WCF服…

Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)

一、创建项目 二、目录结构 三、配置常用中间件 3.1 解析请求体 express.json&#xff08;&#xff09;express.urlencoded&#xff08;&#xff09; 3.2 日志输出 morgan&#xff08;&#xff09; 3.3 为客户端提供跨域资源请求 cors&#xff08;&#xff09; 四、路…

二进制包如何知道go 版本_gops 是怎么和 Go 的运行时进行交互的?

本文基于 Go 1.13 和 gops 0.3.7.gops 旨在帮助开发人员诊断 Go 流程并与之交互。它提供了跟踪运行中的程序几秒钟的功能&#xff0c;可以通过获取 CPU 配置文件 pprof&#xff0c;甚至可以直接与垃圾收集器进行交互。发现gops 提供发现服务&#xff0c;该服务能够列出计算机上…

在VMware开启此虚拟机时出现内部错误

在开启此虚拟机时&#xff0c;总是出现“内部错误“&#xff0c;是因为任务管理器的服务里的VMwareHostd已经停止了&#xff0c;所以需要开启它 步骤&#xff1a;打开任务管理器——》服务——》VMwareHostd 转载于:https://www.cnblogs.com/t0404/p/10291013.html

基于JWT的身份认证学习笔记

JSON Web Token&#xff08;缩写JWT&#xff09;是目前最流行的跨域认证解决方案。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#xff0c;在当前对话&#xff08;session&#xff09;里面保…