详解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 相关文章推荐
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python中执行shell的两种方法总结
Jan 10 Python
Python中字典的setdefault()方法教程
Feb 07 Python
python中的常量和变量代码详解
Jul 25 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
Flask配置Cors跨域的实现
Jul 12 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
python全面解析接口返回数据
Feb 12 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php文件操作相关类实例
2015/06/18 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
定义select的边框颜色
2008/04/28 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
Javascript 刷新全集常用代码
2009/11/22 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
使用matplotlib画散点图的方法
2018/05/25 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
企业办公室主任岗位职责
2014/02/19 职场文书
教师求职自荐信
2014/03/09 职场文书
保护环境建议书400字
2014/05/13 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
离婚协议书怎么写
2015/01/26 职场文书
小兵张嘎观后感
2015/06/03 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python