详解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 相关文章推荐
Python检测网站链接是否已存在
Apr 07 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
python爬虫超时的处理的实例
Dec 19 Python
对python中if语句的真假判断实例详解
Feb 18 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
python getopt模块使用实例解析
Dec 18 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
Python APScheduler执行使用方法详解
Dec 10 Python
python中altair可视化库实例用法
Jan 26 Python
python反扒机制的5种解决方法
Feb 06 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
德生1994机评
2021/03/02 无线电
PHP类的反射用法实例
2014/11/03 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
全面解析JavaScript中“&&”和“||”操作符(总结篇)
2016/07/18 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
js实现缓动动画
2020/11/25 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python数据类型学习笔记
2016/01/13 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python图像和办公文档处理总结
2019/05/28 Python
Python类中self参数用法详解
2020/02/13 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
迅雷Cued工作心得体会
2014/01/27 职场文书
六查六看剖析材料
2014/02/15 职场文书
住房抵押登记委托书
2014/09/27 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
前台接待员岗位职责
2015/04/15 职场文书
趣味运动会标语口号
2015/12/26 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js