详解Python下ftp上传文件linux服务器


Posted in Python onJune 21, 2018

模块介绍:

from ftplib import FTP
 ftp = FTP() #设置变量
 ftp.set_debuglevel(2) #打开调试级别2 显示详细信息
 ftp.connect("IP", "port") #连接ftp, IP和端口
 ftp.log("user", "password") #连接的用户名、密码
 
 ftp.cwd(pathname) #设置FTP当前操作的路径
 ftp.dir() #显示目录下的文件信息
 ftp.nlst() #获取目录下的文件
 ftp.mkd(pathname) #新建远程目录
 ftp.pwd() #返回当前所在位置
 ftp.rmd(dirname) #删除远程目录
 ftp.delete(filename) #删除远程文件
 ftp.rename(from_name, to_name) #修改文件名
 ftp.storbinaly("STOR filename.txt", file_handel, bufsize) # 上传目标文件
 ftp.retrbinaly("RETR filename.txt", file_handel, bufsize) # 上传FTP文件

功能实现:

ftp.dir() 能显示目录下的文件信息,考虑到要分别对文件夹个数和文件数目进行统计,文件夹下存在文件夹和文件嵌套;将dir()后的目录信息放入列表,对列表进行操作;进入子文件夹后进行递归调用操作。

# -*- coding: utf-8 -*-
 
 from ftplib import FTP
 
 ftp = FTP()
 ftp.connect('132.121.xx.xxx', 'xx909')
 ftp.login('crmyun_xxx', 'wyjjjjxJ')
 sum1 = 0
 sum2 = 0
 value = 0
 
 def search_file(start_dir):
  ftp.cwd(start_dir)
  print ftp.pwd()
  dir_res = []
  ftp.dir('.', dir_res.append) #对当前目录进行dir(),将结果放入列表
  for i in dir_res:
   if i.startswith("d"):
    global sum1 
    sum1 += 1
    search_file(ftp.pwd()+"/"+i.split(" ")[-1])
    ftp.cwd('..')
   else:
    global sum2, value
    sum2 += 1
    val = i.split(" ")[-1]
    value += ftp.size(val)
    if ftp.pwd().endswith('/'):    
 #    print ftp.pwd()+val+"  "+str(ftp.size(val))+" B" #打印出每个文件路径和大小
     pass
    else:    
 #    print ftp.pwd()+"/"+val+"  "+str(ftp.size(val))+" B"
     pass
 def sum_file(file_path):
  search_file(file_path)
  print "folder number is "+str(sum1)+", file number is "+str(sum2)+", Totle size is "+str(value)+" B"
  
 
 if __name__ == '__main__':
  sum_file("/apps/crmyun/crmyun_755")

展示结果:

详解Python下ftp上传文件linux服务器

完整上传程序

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

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.quit()与FTP.close()的区别

FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。

FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。

例:下载、上传文件

# coding: utf-8
from ftplib import FTP
import time
import tarfile
import os
# !/usr/bin/python
# -*- coding: utf-8 -*-

from ftplib import FTP

def ftpconnect(host, username, password):
 ftp = FTP()
 # ftp.set_debuglevel(2)
 ftp.connect(host, 21)
 ftp.login(username, password)
 return ftp

#从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()

#从本地上传文件到ftp
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("113.105.139.xxx", "ftp***", "Guest***")
 downloadfile(ftp, "Faint.mp4", "C:/Users/Administrator/Desktop/test.mp4")
 #调用本地播放器播放下载的视频
 os.system('start "C:\Program Files\Windows Media Player\wmplayer.exe" "C:/Users/Administrator/Desktop/test.mp4"')
 uploadfile(ftp, "C:/Users/Administrator/Desktop/test.mp4", "test.mp4")

 ftp.quit()
Python 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Python实现Linux下守护进程的编写方法
Aug 22 Python
Python多线程结合队列下载百度音乐的方法
Jul 27 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
python游戏地图最短路径求解
Jan 16 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Python文件路径名的操作方法
Oct 30 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
python实现内存监控系统
Mar 07 #Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 #Python
python 从csv读数据到mysql的实例
Jun 21 #Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 #Python
python读取文本绘制动态速度曲线
Jun 21 #Python
You might like
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python抽象基类用法实例分析
2015/06/04 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python实现多线程网页下载器
2018/04/15 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
解析python的局部变量和全局变量
2019/08/15 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
高中运动会入场词
2014/02/14 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2014年营销工作总结
2014/11/22 职场文书
大学同学聚会感言
2015/07/30 职场文书